64位.Net应用程序中的内存限制?

| 在运行64位Windows 7并具有2 Gb可用内存(由任务管理器报告)的笔记本电脑上,我能够执行以下操作:
var x = new Dictionary<Guid, decimal>( 30 * 1024 *1024 );
如果没有一台拥有更多RAM的计算机,我想知道这是否可以扩展,以便在具有4 Gb可用内存的计算机上,我将能够分配60M项,而不是“只是” 30M项,这样吗 还是在我无法使用所有可用RAM之前遇到其他限制(.Net和/或Windows)? 更新:好的,所以不允许我分配大于2 Gb的单个对象。重要的是要知道!但是然后我当然很想知道我是否能够通过分配2 Gb块来充分利用所有内存,如下所示:
  var x = new List<Dictionary<Guid, decimal>>();
  for ( var i = 0 ; i < 10 ; i++ )
    x.Add( new Dictionary<Guid, decimal>( 30 * 1024 *1024 ) );
如果计算机具有> 20Gb的可用内存,是否可以使用?     
已邀请:
.NET中的所有对象都有2 GiB限制,决不允许创建超过2 GiB的单个对象。如果您需要更大的对象,则需要确保这些对象是由小于2 GiB的部件构建的,因此您不能拥有大于2 GiB的连续位数组或大于512 MiB的单个字符串,不能完全确定该字符串,但是我已经对该问题进行了一些测试,并且在尝试分配大于512 MiB的字符串时遇到了OutOfMemoryExceptions。 这些限制虽然会受到堆碎片的影响,并且即使GC确实尝试压缩堆,但大对象(大约80K左右的任意跨度)最终会落在大对象堆上,而大堆不是压实。严格来说,还有一点需要注意的是,如果您可以将短期分配保持在此阈值以下,则对于整体GC内存管理和性能会更好。     
更新:.NET 4.5发行版已将2Gb单对象内存限制提高到64位。 您需要在app.config中设置2。 不过,数组中元素的最大数量仍为2 ^ 32-1。 请参阅CLR 4.0中单个对象的大小仍限制为2 GB吗?更多细节。     

要回复问题请先登录注册