代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

.NET最大内存使用2GB,即使对于x64程序集也是如此

  •  9
  • Nate CSS Guy  · 技术社区  · 16 年前

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

    假设我有一个占用256 MB内存的对象,因为它是一个引用类型,我可以有一个包含256 MB对象的数组,只要引用数组的大小保持在2 GB以下,所有对象就可以占用2GB内存,这是正确的吗?

    2 回复  |  直到 13 年前
        1
  •  10
  •   LukeH    16 年前

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

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

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

        2
  •  6
  •   artfulhacker    13 年前

    “在.NET 4及更早版本中,即使在64位进程中,任何对象的大小都不能超过2GB。但是,对于某些使用大型数组的工作负载,这种大小限制是可以限制的。因此,.NET 4.5支持提高64位进程中数组的限制,这样数组可能大于2GB。例如,这意味着您可以分配一个Int32.MaxValueInt32数组,即使这样的数组将消耗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