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


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

如果用 /LARGEADDRESSAWARE 來鏈接應用程序,則 DUMPBIN /HEADERS 將顯示該效果的信息。

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

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

  2. 單擊“鏈接器”文件夾。

  3. 單擊“系統”屬性頁。

  4. 修改“啟用大地址”屬性。

 

不需要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內存.

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM