C# .Net 下 x86使用大內存的處理

/LARGEADDRESSAWARE 選項通知連接器應用程序可處理大於 2 GB 的地址。 在 64 位編譯器中,默認狀況下啓用此選項。 在 32 位編譯器中,若是未在連接器行上指定 /LARGEADDRESSAWARE,則將啓用 /LARGEADDRESSAWARE:NO。windows

若是用 /LARGEADDRESSAWARE 來連接應用程序,則 DUMPBIN /HEADERS 將顯示該效果的信息。app

在 Visual Studio 開發環境中設置此連接器選項

  1. 打開該項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性ui

  2. 單擊「連接器」文件夾。this

  3. 單擊「系統」屬性頁。spa

  4. 修改「啓用大地址」屬性。.net

 

不須要largeaddressaware全部windows程序就都能用到2g內存,2g以上才須要largeaddressaware,在2g之內若是你的程序在分配大內存時報outofmemory exception,通常來講有如下幾種狀況:調試


1.可用內存不夠
2.你在vs2005中用調式方式啓動程序,而且在項目屬性的調式選項裏你啓用了vs2005自帶宿主方式調試。vs2005自帶的調試宿主環境彷佛只提供1g內存的地址空間。
3.使用了動態調整的集合對象但未指定Capacity。如ArrayList,Hashtable等。當在須要請求大內存的狀況下使用動態調整的集合對象必須強制Capacity上限,由於集合動態調整Capacity所須要的內存數是Count數的3倍。假如你空閒2g內存,使用ArrayList時未指定Capacity,capacity是採用翻倍增加策略的,當Capacity用到1g的時候再添加元素.net會請求2g空間,這樣在把全部元素copy到新的內存前總共開銷要3g內存.orm

相關文章
相關標籤/搜索