我正在制作扫描组件,但是当我为文档设置高分辨率(600 dpi)时,我只会在扫描1或2次后得到 System.OutOfMemoryException 。
我的代码如下
public ScannedImage SaveScannedImage(DataTransferredEventArgs e)
{
if (e == null) throw new IOException();
BitmapSource fullResImage;
using (var fullResImageStream = e.GetNativeImageStream())
{
fullResImage = fullResImageStream.ConvertToWpfBitmap(e.ImageInfo.ImageWidth, e.ImageInfo.ImageLength);
}
BitmapSource lowResImage;
using (var lowResImageStream = e.GetNativeImageStream())
{
lowResImage = lowResImageStream.ConvertToWpfBitmap(800, 0);
}
return new ScannedImage(lowResImage, fullResImage);
}
通常发生在
using (var lowResImageStream = e.GetNativeImageStream())
非常感谢帮助。
答案 0 :(得分:0)
您看到的内容可能是由大对象堆(LOH)碎片引起的。
这很难避免,但你可以明确地压缩LOH。
GCSettings.LargeObjectHeapCompactionMode =
GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
另外,请确保以64位进程运行。转动"首选32位"选项,如果它打开。
有关详细信息,您可能需要阅读