[.NET] 程式產生似乎是記憶體不夠的錯誤

看板Visual_Basic作者 (還在想)時間15年前 (2009/06/16 17:49), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
請輸入專案類型(網站專案或者應用程式專案):應用程式專案 這是我之前問到資料庫,或是物件的生命週期等問題時 所做的是同一個程式 大致上的功能都做出來了 給委託人時他說遇到一個問題 我在寫程式時都是使用同一組測試資料 (礙於要提供的資料量太多,有好幾張表格要同時讀入,且那是其他軟體產生的) 主要就是做大約長度為240,時間為500次的模擬作業而已 委託人在測試時說 他使用一組長度為1100左右 時間為3100次左右的模擬時 跳出了System.OutOfMemoryException 未處理的錯誤 ================================================ System.OutOfMemoryException 未處理 Message="已發生類型 'System.OutOfMemoryException' 的例外狀況。" Source="mscorlib" StackTrace: 於System.Object.MemberwiseClone() 於System.Array.Clone() 於CTMandKalmanFliter.Form1.RunCTMandKalman() 於[我的程式碼路徑]:行 685 於System.Threading.ThreadHelper.ThreadStart_Context(Object state) 於System.Threading.ExecutionContext.run ================================================ 看起來是超出可使用的記憶體 在這個程式內,會產生一個大約是3100 x 171的表格 時間點有多長,這個表格就會產生幾個 所以總共是3100 x 3100 x 171筆型態為double的資料 我一看就覺得會爆炸的兇手就是它 所以我在徵求同意後 將原本每次結果都會存下來的做法 改成只會儲存最後一次的結果(但中間還是會產生那些表格,只是會直接放棄) 我丟給他修改過的版本 他卻說他還是不能跑 我自己試了一次,雖然要跑三個多小時 不過還是跑得完 想說是不是只是他硬體比較差 結果我要試第二次時 我自己也出現同樣的錯誤了 這表示前面錯誤的結果 沒有被釋放掉就留到了這一次嗎? 我有確實得將那個巨大的表格 在用完以後釋放掉呀(使用 = Nothing 的做法) 但是結果卻還是沒有真正的釋放掉嗎? 其實應該還是足夠執行才對的 請問要怎麼叫VB去回收那些資源呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.154.54

06/16 21:59, , 1F
GC.Collect(0) 可以強制回收最近使用的資源
06/16 21:59, 1F

06/16 22:54, , 2F
32BIT的程式最多可以定址4g的資料
06/16 22:54, 2F

06/17 01:00, , 3F
開始試試看要寫在哪裡才對...
06/17 01:00, 3F
文章代碼(AID): #1ADsgO68 (Visual_Basic)