2016-11-03 3 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

はい、これを実行するとメモリ不足になります。あなたの方法を5000回反復して32GBシステムを排水しました。問題はThresholdBinaryが別のImageを返すことで、メモリを割り当てられるようにイメージを取得していないが、処分する方法がない。役立つ

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(); 

私のメモリ使用量はほとんど動きません。

関連する問題