FileSystemWatcher 引起的内存不足异常

Out of memory exception caused by FileSystemWatcher

每次在文件夹中创建新图像时,我都会尝试加载图像并对其执行一些处理。代码 运行 在调试模式下正常。但是,当我将可执行文件夹复制到目标机器时。 FileSystemWatcher 每次都抛出 "out of memory" 异常。 .jpg 只有 60KB。代码是用 C# 编写的。

谁能帮我解决这个问题?谢谢你。

private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
   try
   {
       source = new Image<Gray, byte>((Bitmap)Bitmap.FromFile(e.FullPath));
       frame = source.ThresholdBinary(new Gray(180), new Gray(255));
   }
   catch (Exception ex)
   {
       MessageBox.Show("File Loading Failed: " + ex.Message);
   }
}

堆栈跟踪在这里:

.ctor 在 file:line:column 中的偏移量 342 :0:0

主要在 file:line:column 中的偏移量 59 :0:0

您的问题是您在每次调用 fileSystemWatcher_Created 时都替换了 source Bitmap 实例,而没有处理前一个实例。 Bitmap 对象是非托管 GDI+ 资源的包装器,当您不再使用它们时必须是 explicitly disposed。这同样适用于您的 frame 对象。下面的代码向您的事件处理程序添加了显式处置。请注意,我正在锁定以避免线程问题。

try
{
    lock (fileSystemWatcher)
    {
        var oldSource = source;
        var oldFrame = frame;

        source = new Image<Gray, byte>((Bitmap)Bitmap.FromFile(e.FullPath));
        frame = source.ThresholdBinary(new Gray(180), new Gray(255));

        if (oldSource != null)
            oldSource.Dispose();

        if (oldFrame != null)
            oldFrame.Dispose();
    }
}
catch (Exception ex)
{
    MessageBox.Show("File Loading Failed: " + ex.Message);
}