.NET Max Memory即使对于x64程序集也使用2GB

我读过( http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx).NET中对象的最大大小是2 GB。

我是否正确假设如果我有一个占用256 MB内存的对象,因为它是一个引用类型,我可以拥有这些256 MB对象的数组,其中所有对象一起可能占用> 2GB内存,只要大小引用数组的值是否低于2 GB?

是的,你的假设是正确的。

2GB限制分别适用于每个对象。 用于所有对象的总内存可能超过2GB。

(运行时是否能够为您的需求分配足够的内存是另一回事。我怀疑它是否可以在32位机器上找到完整的2GB备用内存,但它在64位上应该不是问题。)

“在.NET 4及更早版本中,即使在64位进程中,任何对象的大小也不能超过2GB。但是,对于使用大型数组的某些工作负载,此大小限制可能会受到限制。因此,.NET 4.5支持提升64位进程中数组的限制,例如,数组可能大于2GB。这意味着,例如,你可以分配一个Int32.MaxValue Int32s数组,即使这样的数组将消耗8GB。大型对象在。 NET被分配在一个特殊的堆上,并不是巧妙地称为大对象堆(LOH); .NET 4.5也看到了对LOH的显着性能改进,包括使用更好的算法来管理堆中的空闲内存。

http://msdn.microsoft.com/en-us/library/hh285054(v=VS.110).aspx

http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx