List <T>中的最大项目是什么?

Ton*_*ion 33 c# collections

有人知道列表中的最大项目数是多少?

如何增加这个尺寸?或者是否有一个收集无限物品的集合?(尽可能多地适合记忆)

编辑:

当在一个int列表中Count = 134217728时,我得到一个内存不足异常.获得了3G的RAM,其中2.2正在使用中.声音正常

Mar*_*ell 57

List<T>将被限制为数组的最大值,即2GB(即使在x64中).如果这还不够,那么您使用的是错误类型的数据存储.您可以通过启动正确的大小来节省大量开销 - 通过传递int给构造函数.

重新编辑 - 使用134217728 x Int32,即512MB.请记住,List<T>使用加倍算法; 如果你通过滴水喂食物品Add(没有首先分配所有空间),它将尝试加倍到1GB(在你已经拥有的512MB之上,你的应用程序的其余部分,当然还有CLR运行时和库).我假设您使用的是x86,因此每个进程已经有2GB的限制,并且很可能在添加项目时将您的"大对象堆"碎片化为死亡.

就个人而言,这听起来似乎是正确的开始在这一点上获得记忆.


编辑:在.NET 4.5中,如果<gcAllowVeryLargeObjects>启用了交换机,则允许大于2GB的阵列.那么限制是2 ^ 31项.这可能对引用数组(x64中每个8字节)或大structs 数组有用.

  • 不,我指的是CLR强加的2GB内存.对于引用类型,这意味着(在x64上)每个引用8个字节,所以再划分几次;-p (7认同)
  • 上面的一个有趣的副作用是**理论上**你可以在x86中的数组中有更多的引用.实际上,在x86上,你永远不会设法分配一个大*和*的空间,可以放入任何有用的(和不同的)对象...在任何一种情况下,这个大小的列表/数组是只是完全错了. (4认同)
  • 有关详细信息,请参阅此问题http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0 (3认同)