每次在文件夹中创建新图像时,我都会尝试加载图像并对其执行一些处理。代码在调试模式下运行正常。但是,当我将可执行文件夹复制到目标计算机时。 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
答案 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);
}