我有一个应用程序,它提供打印功能并能够预览该打印件。使用PrintPreviewDialog
处理打印预览。该应用程序是一个C#WinForms .Net 4.0应用程序。
本质上,该功能是打印(预览)多页报告,在此特定实例中,它预览大量图像文件(每页2张图像约950张)。
在这种情况下,应用程序在页面462处抛出错误(因此总共不会太远),并且此时可以使用以下任务管理器值:
我确信内存(虽然很高)不是问题,因为我预计内存不足异常。 GDI对象有点过头了,但我不认为这个太高了(我相信默认限制是10000?)
显示的实际异常消息是有用的:
GDI +中发生了一般错误
其他一些需要注意的事项:
Image
对象的集合加载到内存中(这解释了高GDI对象计数),此阶段无法更改最后,我的问题是:我是否应该注意哪些限制可能导致此行为?例如可能在注册表中设置的Windows限制。与打印内存有关的东西?或者不同的GDI打印限制?
我可以运行哪些进一步的测试来帮助诊断原因吗?
答案 0 :(得分:0)
我不知道它是否有帮助,但可能不是系统限制的情况,而是文件锁定。
您提到您正在使用Image将文件加载到内存中。 MSDN说here:
文件保持锁定状态,直到图像被丢弃。
然后,如果你的程序试图触摸它,GDI +会变得疯狂。
将图像保存到光盘时有时会出现错误,如下所示: Image.Save(..) throws a GDI+ exception because the memory stream is closed
也许尝试使用FileShare.ReadWrite选项将图像加载到MemoryStream中?