FileSystemWatcher引起的内存不足异常

时间:2015-12-09 22:53:42

标签: c# filesystemwatcher

每次在文件夹中创建新图像时,我都会尝试加载图像并对其执行一些处理。代码在调试模式下运行正常。但是,当我将可执行文件夹复制到目标计算机时。 FileSystemWatcher抛出了"内存不足的异常"每次。 .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位于文件中的偏移342处:行:列:0:0

Main位于文件中的偏移量59:line:column:0:0

1 个答案:

答案 0 :(得分:1)

您的问题是,在每次调用source时,您都在替换Bitmap fileSystemWatcher_Created实例,而不会丢弃之前的实例。 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);
}