进行打印预览时是否有限制?

时间:2013-07-09 13:51:45

标签: c# winforms printing

我有一个应用程序,它提供打印功能并能够预览该打印件。使用PrintPreviewDialog处理打印预览。该应用程序是一个C#WinForms .Net 4.0应用程序。

本质上,该功能是打印(预览)多页报告,在此特定实例中,它预览大量图像文件(每页2张图像约950张)。

在这种情况下,应用程序在页面462处抛出错误(因此总共不会太远),并且此时可以使用以下任务管理器值:

  • 内存(PWS):~1.6GB
  • 句柄:~480
  • 用户对象:~300
  • GDI对象:~1400

我确信内存(虽然很高)不是问题,因为我预计内存不足异常。 GDI对象有点过头了,但我不认为这个太高了(我相信默认限制是10000?)

显示的实际异常消息是有用的:

  

GDI +中发生了一般错误

其他一些需要注意的事项:

  • 这是在客户的站点上运行的应用程序,因此无法运行调试程序
  • 图像首先作为Image对象的集合加载到内存中(这解释了高GDI对象计数),此阶段无法更改
  • 我还没有确认在进行真正的打印时这是否也是一个问题,显然没有人想浪费所有的纸张,但我正在等待打印到PDF测试的结果

最后,我的问题是:我是否应该注意哪些限制可能导致此行为?例如可能在注册表中设置的Windows限制。与打印内存有关的东西?或者不同的GDI打印限制?

我可以运行哪些进一步的测试来帮助诊断原因吗?

1 个答案:

答案 0 :(得分:0)

我不知道它是否有帮助,但可能不是系统限制的情况,而是文件锁定。

您提到您正在使用Image将文件加载到内存中。 MSDN说here

  

文件保持锁定状态,直到图像被丢弃。

然后,如果你的程序试图触摸它,GDI +会变得疯狂。

将图像保存到光盘时有时会出现错误,如下所示: Image.Save(..) throws a GDI+ exception because the memory stream is closed

也许尝试使用FileShare.ReadWrite选项将图像加载到MemoryStream中?