Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EmguCV中的图像未释放资源_C#_Memory Leaks_Garbage Collection_Emgucv - Fatal编程技术网

C# EmguCV中的图像未释放资源

C# EmguCV中的图像未释放资源,c#,memory-leaks,garbage-collection,emgucv,C#,Memory Leaks,Garbage Collection,Emgucv,我使用的是EmguCV 3.1.0.2282,我发现当我使用图像时,有时它不会释放其资源并占用内存,直到PC资源耗尽并引发内存不足异常 下面是我在应用程序中执行的测试代码。单击按钮时,将根据内存中的现有位图实例化新的本地图像。如果选中该复选框,它将执行手动处理 private void button1_Click(object sender, EventArgs e) { Image<Bgr, Byte> TempImage = new Image&l

我使用的是EmguCV 3.1.0.2282,我发现当我使用图像时,有时它不会释放其资源并占用内存,直到PC资源耗尽并引发内存不足异常

下面是我在应用程序中执行的测试代码。单击按钮时,将根据内存中的现有位图实例化新的本地图像。如果选中该复选框,它将执行手动处理

    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;
        }
    }   
private void按钮1\u单击(对象发送者,事件参数e)
{
Image TempImage=新图像(CurrentLeftBitmap);
TempImage.ThresholdBinary(新的Bgr(2.2,3.3,4.4),新的Bgr(100.01000.01000.0));
如果(复选框1.选中)
{
TempImage.Dispose();
TempImage=null;
}
}   
我发现每次单击按钮,内存就会下降,如果不重新启动应用程序,内存将无法释放。即使我手动处理,内存仍然会下降。有趣的是,如果我注释掉ThresholdBinary步骤,它工作得很好。但是,它仍然需要手动处理。我也尝试过使用语句,但仍然是一样的


我的问题是,有没有人遇到过类似的事情?实现这些图像对象的正确方法是什么?

是的,这样做会耗尽内存。我通过对您的方法进行5000次迭代,设法耗尽了我的32GB系统。问题是ThresholdBinary返回另一个图像,您没有拍摄该图像,因此内存被分配,但无法处理。改变

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


运行这5000次,我的内存使用几乎没有变化。

是的,这样做会耗尽您的内存。我通过对您的方法进行5000次迭代,设法耗尽了我的32GB系统。问题是ThresholdBinary返回另一个图像,您没有拍摄该图像,因此内存被分配,但无法处理。改变

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

运行这5000次,我的内存使用几乎没有变化

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