我听说.Net Array
的大小存在严格限制。据说,可以分配给Array
对象的任何单个实例的最大内存量(无论是int[]
,double[]
还是您自己的数组)都是2GB。不,如果你有64位机器,2GB限制仍然存在。
我不确定我的印象是否正确。有谁可以确认?
答案 0 :(得分:23)
在4.5之前的.NET版本中,最大对象大小为2GB。从4.5开始,如果启用gcAllowVeryLargeObjects,您可以分配更大的对象。请注意,string
的限制不受影响,但“数组”也应该包含“列表”,因为列表由数组支持。
答案 1 :(得分:13)
这是正确的。 No single object can be larger than 2 GB。
与32位Windows操作一样 系统,有2GB的限制 您可以创建的对象的大小 运行64位托管应用程序 在64位Windows操作系统上。
此问题有其他详细信息和一些有用的链接:Single objects still limited to 2 GB in size in CLR 4.0?
答案 2 :(得分:4)
您将首先遇到实际限制 - 分配2gb数组是不可能的。我遇到的实际限制是在程序开始时大约800mb标记 - 之后大幅下降。
任何大于64mb的东西都是32位的运气赌博 - 大型对象堆没有进行碎片整理,因此你需要65mb一块免费或分配失败。
理论限制是:
但严重的是,实际意义更大。
对于.NET 4.0 ....考虑使用内存映射文件;)
答案 3 :(得分:1)
我原以为限制可能在索引上。我认为使用的索引必须是一个整数,所以任何大于整数的东西都不会起作用,除非他们有一些方法。那将是4294967296元素。不确定这是否真的是半真的。我想知道答案。
编辑: 正如tomtom所指出的,整数通常是有符号的,除非它们使用非有符号整数。所以4294967296或2147483648的一半左右。
答案 4 :(得分:0)
希望得到这个帮助:http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx
即。
- 它使用int作为索引,其最大值= 2,147,483,647(2GB)
- 它的设计。 2。
醇>