[Halcon] [Tip] Halcon 記憶體無法釋放 Note!

天呀~這真的是一個漫長的找蟲時刻!
日以繼夜的跑~跑~跑~
就是為了看到問題之所在呀~
最後壓縮到...是利用Halcon函式來檢查條碼的區域有問題。

只要掠過檢查條碼的區段,記憶體就乖乖的在原地徘徊...
反之...記憶體就會一階一階的往上爬~直到爆炸為止呀!
爆炸後...系統就整個hang了,做啥都沒效...只能重開機了。

如果有類似問題,可以測試以下方式:

1.針對大圖像手動的去執行Reset()
  確認Halcon有釋放大型的圖像資源。
2.每次執行檢測結束時,手動呼叫GC
  System::GC::Collect();
  System::GC::WaitForPendingFinalizers();
  用以確認.NET程式有做釋放資源的動作。
3.檢查是否有未釋放的資料...
  是否有new了,但是沒有delete的狀況。
4.確認做大量運算的影像是否為單一通道
  這次就是因為這一個問題啦...把三通道的影像改為單一通道後,記憶體狀況就很好。
  由於不知道Halcon內部是如何清除記憶體的,所以,可以的話,盡量餵資料量較少的影像進去囉!

感謝我親愛的同事~繼續加油測試呀!GOGO~

連續測試跑片了15小時之後,發現還是會記憶體上漲拉!只是可以撐比較久!天呀!應該還有其他問題!

2013-11-31 更新:
最後發現是因為Halcon中的某一參數設定導致。大致用意是對Halcon運算元做多執行緒的處理,當將此參數關閉,就可以消除這個問題,但是運算速度會變慢一點...

但是不當機最大,先用這個solution吧!

這個網誌中的熱門文章

登入失敗: 使用者帳戶限制。可能原因為不允許空的密碼,登入時數限制,或強制的原則限制

[Win7] 電腦管理-損毀傾印

[Tips] 設定桌面文字顏色