none
OutOfmemory exception RRS feed

  • 問題

  • 我有一支程式用C# .net 開發   記憶體會一直成長 

    使用者環境  會開許多不同的程式  所以吃記憶體很重

    當這隻程式在 80000K  就會 出現 outofmemory 

    這隻程式 我已經把 存collection 的部份有進行tuning

    也有 在 main form 做 GC.collect()

    到了  80000K  就出現 out of memory

    呼  改了又改  掛~~~

    可是  其它用 .net 開發的程式  在  140000K 都不會 outofmemory

    我是哪裡有設定錯誤 

    程式因為不知哪一段出問題  所以  無法列出  程式碼

    記憶體為何會有這樣的記憶體  限制差別 

    我查 google 大多是講asp .net  但 我的是  win AP

    有人有經驗嘛!? 

     

    2010年4月21日 上午 09:17

解答

  • Hi,

    工作管理員上方檢視->欄位

    可以設定要顯示的欄位

    有聽到種說法是主要看的是虛擬記憶體的欄位

    像是下面這篇第一個回應

    http://www.dotblogs.com.tw/larrynung/archive/2009/05/22/8522.aspx

    您可以從那些欄位下手看看

    也可以寫程式判斷

    像是黑暗大就有整理一個類別可以直接計算

    可以去找一下

     

    而之前提供給你的連結內也有介紹些工具

    像是CLRProfile、效能技術器

    也可以使用一下

    像CLRProfile就可以看到GC三個Level中的物件分佈


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 布利 2010年4月22日 上午 07:42
    2010年4月21日 下午 04:45

所有回覆

  • 我有一支程式用C# .net 開發   記憶體會一直成長 

    使用者環境  會開許多不同的程式  所以吃記憶體很重

    當這隻程式在 80000K  就會 出現 outofmemory 

    這隻程式 我已經把 存collection 的部份有進行tuning

    也有 在 main form 做 GC.collect()

    到了  80000K  就出現 out of memory

    呼  改了又改  掛~~~

    可是  其它用 .net 開發的程式  在  140000K 都不會 outofmemory

    我是哪裡有設定錯誤 

    程式因為不知哪一段出問題  所以  無法列出  程式碼

    記憶體為何會有這樣的記憶體  限制差別 

    我查 google 大多是講asp .net  但 我的是  win AP

    有人有經驗嘛!? 

     


    我想請教  各位大大

    因為 開發時 在我的環靜都不會出現  outofmemory

    但 我又不可能去模擬使用者的環境

    大家給否  幫我想個方法  讓我的記憶體也  能被某一程式佔住很大

    要怎麼寫 讓我也能測出 outofexception   或者  要如何 必免  outofmemory 發生

    因為 實在很奇怪  同事寫的  佔得記憶體比我的大那麼多

    也不會 出現此Exception

     

    2010年4月21日 下午 12:01
  • Hi,

    您可以參閱這篇

    深究 CLR勘查記憶體問題

    http://msdn.microsoft.com/zh-tw/magazine/cc163528.aspx

     

    若要模擬記憶體被某隻程式占住

    寫隻程式把記憶體吃掉就好了


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年4月21日 下午 02:08
  • .Net 擲出的錯誤訊息盒,左下方會有個 詳細 按鈕,裡面有更詳細的訊息可參考。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月21日 下午 03:17
  • 我剛寫一個小程式

    有一個疑問  這個 程式 會丟出 outofmemory

    可是 明明  記憶體還很多 為何會有exception

     try
                {
                    int[] a = new int[99999999];
                    int[] b = new int[99999999];
                  
                    int[] c = new int[99999999];//exception thrown
                    int[] d = new int[99999999];
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Message:" + ex.Message + "\n\nStacktrace:" + ex.StackTrace + "\n\nData:" + ex.Data + "\n\n" + ex.ToString());
                }

    2010年4月21日 下午 03:49
  • int = 4 bytes

    0 ~ 99,999,999 = 100,000,000 將近 400 mb ,到第三個才擲出例外,這時候記憶體使用量應該是 1.2 GB 吧...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月21日 下午 04:20
  • int = 4 bytes

    0 ~ 99,999,999 = 100,000,000 將近 400 mb ,到第三個才擲出例外,這時候記憶體使用量應該是 1.2 GB 吧...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。


    那  windows工作管理員  裡的 記憶體使用量  代表什麼啊  ?!

    我都用這個再比較耶\

    有辦法  在 開發階段  用 tool 去看 哪個地方記憶體佔多少之類的?~

    2010年4月21日 下午 04:29
  • Hi,

    工作管理員上方檢視->欄位

    可以設定要顯示的欄位

    有聽到種說法是主要看的是虛擬記憶體的欄位

    像是下面這篇第一個回應

    http://www.dotblogs.com.tw/larrynung/archive/2009/05/22/8522.aspx

    您可以從那些欄位下手看看

    也可以寫程式判斷

    像是黑暗大就有整理一個類別可以直接計算

    可以去找一下

     

    而之前提供給你的連結內也有介紹些工具

    像是CLRProfile、效能技術器

    也可以使用一下

    像CLRProfile就可以看到GC三個Level中的物件分佈


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 布利 2010年4月22日 上午 07:42
    2010年4月21日 下午 04:45