1

这个问题被问了很多,但没有人回答!我正在使用 EmguCV,它是 .NET 的 OpenCV 包装器。我正在处理所有创建的对象,但我的应用程序仍在使用越来越多的内存,直到它崩溃。我几乎尝试了一切,包括:.Dispose() =null using() 甚至 GC 几乎每半秒运行一次,但没有任何效果!这是我的代码:

(我选择了 100 张扫描图像,所有 JPG 类型和 300dpi)其中一张图像上传到 DropBox 以保持质量: https ://www.dropbox.com/s/tsbe8pesbxk7dsz/Example.jpg?dl=0

private void OpenFolder_Click(object sender, EventArgs e)
{
    using (OpenFileDialog open = new OpenFileDialog())
    {
        open.Multiselect = true;
        if (open.ShowDialog() == DialogResult.OK)
            for (int i = 0; i < open.FileNames.Count(); i++)
                using (Image<Bgr, byte> ToProcess = new Image<Bgr, byte>(open.FileNames[i]))
                    ProcessImage (ToProcess);
    }
}

private void ProcessImage (Image<Bgr, byte> imgInput)
{
    imgInput._SmoothGaussian(5);            
}

我还尝试将ProcessImageFunction 中的代码更新为以下代码,但我的程序冻结并崩溃!

IntPtr image = imgInput;
imgInput._SmoothGaussian(5);
CvInvoke.cvReleaseImage(ref image);

重要更新: 如果函数在我的程序崩溃之前完成,令人惊讶的是它会释放所有内存。这是一个图表。

拉姆上升

我正在使用 VS 2017-Community,Win10 64 位,都是最新的,并且是 EmguCV 3.4.3 的最后一个稳定版本

4

0 回答 0