Memory 佳能EDSDK ObjectEvent\u DirItemRequestTransfer
我的C#应用程序每3分钟拍摄一次图像,我每次都从EDSDK中获得预期的图像。我的问题是,应用程序的每次快照都会泄漏大约5MB的数据,我非常确定问题出在EDSDK上 代码: 行OnImageCaptured(图像)只是将图像发送到控制器,该控制器将来自相机的图像与另一个图像合并,然后在保存最终合并图像后处理这两个图像:Memory 佳能EDSDK ObjectEvent\u DirItemRequestTransfer,memory,memory-leaks,edsdk,Memory,Memory Leaks,Edsdk,我的C#应用程序每3分钟拍摄一次图像,我每次都从EDSDK中获得预期的图像。我的问题是,应用程序的每次快照都会泄漏大约5MB的数据,我非常确定问题出在EDSDK上 代码: 行OnImageCaptured(图像)只是将图像发送到控制器,该控制器将来自相机的图像与另一个图像合并,然后在保存最终合并图像后处理这两个图像: private void ImageCaptured(Image originalImage) { Image watermark = null;
private void ImageCaptured(Image originalImage)
{
Image watermark = null;
//Merge images
try
{
watermark = Image.FromFile(Settings.Default.ImageWatermarkFilename);
_imageController.Merge(originalImage, watermark);
_imageController.SaveImage(originalImage);
}
catch (Exception ex)
{
LogManager.Instance.UpdateLog(string.Format("Error - Failed to merge and save images. Exception: {0}.", ex.Message));
//HACK:
System.Windows.Forms.Application.Restart();
App.Current.Shutdown();
}
finally
{
originalImage.Dispose();
if (watermark != null)
watermark.Dispose();
}
}
那么为什么应用程序内存会泄漏呢?有什么想法吗
/干杯释放你的
GCHandle
。当你每次拍摄时,它都是吞噬记忆的罪魁祸首
gcHandle.Free()
更新:我解决了这个问题。。。我只需要调用gcHandle.Free()-非常简单。
private void ImageCaptured(Image originalImage)
{
Image watermark = null;
//Merge images
try
{
watermark = Image.FromFile(Settings.Default.ImageWatermarkFilename);
_imageController.Merge(originalImage, watermark);
_imageController.SaveImage(originalImage);
}
catch (Exception ex)
{
LogManager.Instance.UpdateLog(string.Format("Error - Failed to merge and save images. Exception: {0}.", ex.Message));
//HACK:
System.Windows.Forms.Application.Restart();
App.Current.Shutdown();
}
finally
{
originalImage.Dispose();
if (watermark != null)
watermark.Dispose();
}
}