日期:2014-05-16  浏览次数:21992 次

c#程序最多可以使用多少内存?64位 win7。
我有张400w记录的表,字段有60多个,我把这些记录一次性加入到list里,当内存用到1.5G的时候,就内存溢出了。
我的电脑内存有16G,64位win7操作系统。

用户代码未处理 System.OutOfMemoryException
  HResult=-2147024882
  Message=引发类型为“System.OutOfMemoryException”的异常。
  Source=mscorlib
  StackTrace:
       在 System.String.CreateStringFromEncoding(Byte* bytes, Int32 byteLength, Encoding encoding)
       在 System.Text.UTF8Encoding.GetString(Byte[] bytes, Int32 index, Int32 count)
       在 MySql.Data.MySqlClient.MySqlPacket.ReadString(Int64 length)
       在 MySql.Data.Types.MySqlDouble.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket packet, Int64 length, Boolean nullVal)
       在 MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)
       在 MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)
       在 MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)
       在 MySql.Data.MySqlClient.MySqlDataReader.Read()
------解决方案--------------------
一般是2G就暴了。你把他编译成64位试试。让他运行在64位下。
------解决方案--------------------
先从你的设计改起吧
------解决方案--------------------
你想多了,没这么做程序的。
------解决方案--------------------
数组最大索引到2G条。因为它使用int实现indexer,为了防止出错,做了限制。
------解决方案--------------------
要不要这么霸气,不带这么使用内存的~
------解决方案--------------------
这样内存肯定会吃不消。
------解决方案--------------------
全部放内存中目的是什么?
可以的话不能分开取吗
每次取50w条

------解决方案--------------------
连续内存最大2G,如果你的List<T>的T是引用类型,连续的仅仅是引用数组,可以试试编译成64位程序。