我有一个提供打印功能和预览打印功能的应用程序。打印预览使用PrintPreviewDialog
. 该应用程序是 C# WinForms .Net 4.0 应用程序。
本质上,该功能是打印(预览)一个多页报告,在这个特定的实例中,它正在预览大量的图像文件(大约 950 个,每页 2 个图像)。
在这种情况下,应用程序在第 462 页抛出错误(因此与总数相差不远),此时以下任务管理器值可用:
- 内存 (PWS):~1.6GB
- 手柄:~480
- 用户对象:~300
- GDI 对象:~1400
我确信内存(虽然很高)不是问题,因为我预计内存不足异常。GDI 对象有点上,但我不认为这太高(我相信默认限制是 10000?)
显示的实际异常消息非常有用:
GDI+ 中出现一般错误
其他一些需要警惕的事情:
- 这是在客户站点上运行的应用程序,因此无法运行调试器
- 图像首先作为
Image
对象集合加载到内存中(这解释了高 GDI 对象计数),并且在此阶段无法更改 - 我还没有确认在进行真正的打印时这是否也是一个问题,显然没有人愿意浪费所有的纸张,但我正在等待打印到 PDF 测试的结果
最后,我的问题是:我应该注意哪些限制可能会导致这种行为?例如可能在注册表中设置的 Windows 限制。与打印内存有关的东西?或不同的 GDI 打印限制?
是否有任何进一步的测试可以帮助诊断原因?