2016-11-03 39 views
0

我正在使用EmguCV 3.1.0.2282,並且我發現當我使用圖像時,有時候它不會釋放其資源並消耗內存,直到PC不在資源中內存不足異常被拋出。EmguCV中的圖像沒有釋放資源

這是我在我的應用程序中測試的代碼。單擊按鈕時,會根據內存中已有的位圖實例化新的本地圖像。如果複選框被選中,它將執行手動處理。

private void button1_Click(object sender, EventArgs e) 
    { 
     Image<Bgr, Byte> TempImage = new Image<Bgr, Byte>(CurrentLeftBitmap); 
     TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0));    
     if (checkBox1.Checked) 
     { 
      TempImage.Dispose(); 
      TempImage = null; 
     } 
    } 

我發現每次點擊按鈕時,內存都會下降,不會在沒有重新啓動應用程序的情況下被釋放。即使我做了手動處理,內存仍然下降。有趣的是,如果我註釋了ThresholdBinary步驟,它工作正常。但是,它仍然需要手動處理。我也嘗試了USING語句,但仍然一樣。

我的問題是有沒有人遇到類似的東西?什麼是實現這些圖像對象的正確方法?

回答

1

是的,這樣做會讓你失去記憶。我設法消耗我的32GB系統做5000次迭代你的方法。問題是ThresholdBinary返回另一個圖像,您沒有拍攝該圖像,因此內存得到分配但無法處理。更改

TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0)); 

Image<Bgr, byte> newImage = TempImage.ThresholdBinary(new Bgr(2.2, 3.3, 4.4), new Bgr(100.0, 100.0, 100.0)); 

會有所幫助。

因爲他們是當地人,GC最終會清理他們。但處理事情總是一個好主意。所以我添加

TempImage.Dispose(); 
newImage.Dispose(); 

運行這個5000的時間內存利用率幾乎不移動。