none
如何增加WinForm執行檔的記憶體限制? RRS feed

  • 問題

  • 我使用vb.net2003/2005

    由於使用Image物件瀏覽及列印高解析度圖片

    發現只要Winform執行檔使用的記憶體超過1600MB

    就會出現OutOfMemoryException的錯誤

    請問有辦法調大記憶體的限制嗎?

    或是對圖形處理來說有什麼方式可以減少記憶體的使用?

    請前輩指點,謝謝


    Tommy1231

    2012年12月3日 上午 07:23

解答

  • 會出現 OutOfMemory 的原因還滿多的

    (1) 在 .Net 4.0(含) 以前, 不論你的程式是 X86 或 X64, 單一物件最大只能到 2GB (東扣西扣後, 差不多在 1.6 GB 後就會開始出包),

    參考 64 位元應用程式 ,

    在 .Net 4.5 有個可用的解決方法: gcAllowVeryLargeObjects<gcallowverylargeobjects></gcallowverylargeobjects>

    (2) 如果在 32 位元作業系統上,處理序的最大可用虛擬記憶體區塊小於 64 MB (64 位元作業系統上小於 1 GB),那麼虛擬記憶體不足就可能引發 OOM (在 64 位元作業系統上,應用程式不太可能會發生虛擬記憶體空間不足的情況)。

    參考來源: 勘查記憶體問題

    PS: 你可以依據這篇文的方式去找出原因

    (3) 在 X86 平台上, 整個應用程式大概也只能用到 2GB, 看來也不太合用, 參考 DA0018:以處理序 Managed 記憶體限制執行的 32 位元應用程式

    (4) 不過就你的例子, 我個人是覺得這樣的狀況應該改用 64 位元平台才是


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 Tommy1231 2012年12月3日 下午 12:50
    2012年12月3日 上午 11:23
    版主

所有回覆

  • 如果您用的是32位元的系統, 1600MB己經接近極限了, 若記憶體不足, 可以考慮換裝64位元的系統
    2012年12月3日 上午 07:26
  • 如果您用的是32位元的系統, 1600MB己經接近極限了, 若記憶體不足, 可以考慮換裝64位元的系統

    我用的是32位元系統,記憶體有3.xG,當執行檔使用到1600MB,還有剩下約1G的記憶體可以使用,但.net不用的原因是不是有哪個組態檔限制住了?

    Tommy1231

    2012年12月3日 上午 07:32
  • 可以在開機檔加入 /3GB  參數
    實際作法 參考 這篇


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年12月3日 上午 09:41
  • 會出現 OutOfMemory 的原因還滿多的

    (1) 在 .Net 4.0(含) 以前, 不論你的程式是 X86 或 X64, 單一物件最大只能到 2GB (東扣西扣後, 差不多在 1.6 GB 後就會開始出包),

    參考 64 位元應用程式 ,

    在 .Net 4.5 有個可用的解決方法: gcAllowVeryLargeObjects<gcallowverylargeobjects></gcallowverylargeobjects>

    (2) 如果在 32 位元作業系統上,處理序的最大可用虛擬記憶體區塊小於 64 MB (64 位元作業系統上小於 1 GB),那麼虛擬記憶體不足就可能引發 OOM (在 64 位元作業系統上,應用程式不太可能會發生虛擬記憶體空間不足的情況)。

    參考來源: 勘查記憶體問題

    PS: 你可以依據這篇文的方式去找出原因

    (3) 在 X86 平台上, 整個應用程式大概也只能用到 2GB, 看來也不太合用, 參考 DA0018:以處理序 Managed 記憶體限制執行的 32 位元應用程式

    (4) 不過就你的例子, 我個人是覺得這樣的狀況應該改用 64 位元平台才是


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 Tommy1231 2012年12月3日 下午 12:50
    2012年12月3日 上午 11:23
    版主
  • 如果是衛星運算這種單張圖就幾百 MB 以上的 JPG ,請自行撰寫抽點運算的方式呈現。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月3日 下午 03:52