天天看點

如何突破.NET記憶體限制?

     我們現在的一個.NET應用程式需要用到2G左右的記憶體,當我們将這個程式放到有4G記憶體的伺服器上運作時,就會抛出OutOfMemory異常。

     為了搞清楚抛出異常的原因,我寫了個用于申請記憶體的測試程式,每次申請100M。運作這個測試程式,發現每次申請到1.2G時就會抛出OutOfMemory異常。

(1)在boot.ini檔案中增加/3GB的開關。 

     [boot loader] 

     timeout=30 

     default=multi(0)disk(0)rdisk(0)partition(2)\WINNT 

     [operating systems] 

     multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB

(2)在指令行視窗,進入該目錄,如 cd "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin"

(3)運作link指令: link -edit -LARGEADDRESSAWARE server.exe (server.exe為你的.Net程式)

(4)你的server.exe就可以使用到2.4G記憶體了

      按照文章所示的方法,我進行了試驗,但是還是行不通,每次到1.2G就抛OutOfMemory異常。仔細看看那篇文章,作者使用的是.NET 1.1,而我們的程式是基于.NET 2.0的,有可能是這個方法對2.0不适用吧。

     不知道大家有碰到過類似的問題沒有?有解決方案的請留言告訴一下,非常謝謝。

2009.01.06:最簡單的方案就是大家建議的更新到64位,搞定噻,呵呵。

(1)在伺服器上裝64位的OS

(2)在伺服器上裝64位的.NET Framework

(3)應用程式不用重新編譯,直接運作即可,JIT會自動生成針對64位的機器碼。但如果你的應用程式中包含了下列因素,可能會出問題:浮點比較運算、二進制序列化、PInvoke等。

(4)如果應用程式有加密,要改用64位的加密工具:)

繼續閱讀