我有一个应用程序可以提供打印功能并能够预览该打印件。使用 PrintPreviewDialog
处理打印预览.该应用程序是一个 C# WinForms .Net 4.0 应用程序。
本质上,该功能是打印(预览)多页报告,在这个特定实例中,它正在预览大量图像文件(每页 2 个图像大约 950 个)。
在这种情况下,应用程序在第 462 页抛出错误(因此与总数相差不远),此时以下任务管理器值可用:
- 内存(PWS):~1.6GB
- 处理量:~480
- 用户对象:~300
- GDI 对象:~1400
我确信内存(尽管很高)不是问题,因为我预计会发生内存不足异常。 GDI 对象有点多,但我不认为这太高(我相信默认限制是 10000?)
显示的实际异常消息总是有用的:
A generic error occurred in GDI+
其他一些需要注意的事情:
- 这是在客户站点运行的应用程序,因此无法运行调试器
- 图像首先作为
Image
对象的集合加载到内存中(这解释了高 GDI 对象计数)并且在这个阶段无法更改 - 我还不确定这是否也是真正打印时的问题,显然没有人愿意浪费所有纸张,但我正在等待打印到 PDF 测试的结果
最后,我的问题是:是否有任何我应该注意的可能导致此行为的限制?例如可能在注册表中设置的 Windows 限制。与打印内存有关的东西?还是不同的 GDI 打印限制?
我是否可以运行任何进一步的测试来帮助诊断原因?
最佳答案
不知道有没有帮助,但可能不是系统限制的情况,而是文件锁。
您提到您正在使用 Image 将文件加载到内存中。 MSDN 说 here :
The file remains locked until the Image is disposed.
然后,如果您的程序试图触及它,GDI+ 就会发疯。
将图像保存到光盘时有时会出现错误,如下所示: Image.Save(..) throws a GDI+ exception because the memory stream is closed
也许尝试使用 FileShare.ReadWrite 选项将图像加载到 MemoryStream 中?
关于c# - 进行打印预览时是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17550020/