2012-10-31 71 views
2

當應用程序針對x64構建時,我想查看System.OutOfMemoryException和任務管理器中消耗的內存。應用程序屬性中的「生成」選項卡中有兩個下拉菜單:「平臺目標」和「平臺」,均設置爲x64。VS2010 C#64位應用程序在消耗1.5GB內存後拋出OutOfMemoryException

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<long> lst = new List<long>(); 
      while (true) 
      { 
       lst.Add(long.MaxValue); 
      } 
     } 
    } 
} 

它確實顯示OutOfMemoryException異常......但是當它停止,任務管理器顯示一個數字,如1587443K這是1.5GB這將我預計,如果它是針對x86的建立。 是的,操作系統是64位。

我忘了別的嗎?

回答

5

我忘了別的嗎?

是的 - 在.NET 4中,每個對象仍然有2GB的限制。 (你可以使用更多的內存,但不能在一個單獨的對象中。)我懷疑你的列表需要重新分配內部緩衝區,在單個數組中需要〜3GB。

如果您設置了<gcAllowVeryLargeObjects>配置參數,您可能會很高興聽到.NET 4.5 supports larger objects

+0

不知道。謝謝 :) – Mirek

相關問題