我有一个非常简单的应用程序,打印TIFF文件到各种networking打印机。 打印机都安装在3台不同的打印服务器上,而应用程序则在一台独立的机器上运行。 (让我们称它们为Print1,2,3和App1。)
大多数情况下,这种方法运行良好,但最近我发现某些新的打印机(使用PCL6驱动程序的HP P4515x型号)正在导致App1上spoolsv.exe打开的句柄数量激增。 一个文件可以将手柄提高500,并且它们不会被释放,最终导致App1机器不能及时被重新启动。 实际的打印服务器似乎没有受到这个问题的影响。
代码在概念上做了一些非常相似的事情,但是从后台服务运行在一个域帐户: MSDN链接 。 我使用\ print3 \ deptP4515x命名约定来指定打印机。
[不知道这是否在StackOverflow或ServerFault上,但我认为由于可能的驱动程序问题,它应该在这里?]
编辑:我运行procexp,看看它已经发展到1243年,1135是这样的:关键HKLM \ SOFTWARE \惠普\圣地亚哥共享IO
尝试使用另一个驱动程序(如HP LaserJet 4或4100 PCL)再现症状。 使用内置的驱动程序,而不是由供应商提供的自定义驱动程序。
如果这些驱动程序出现症状,则可能不是P4515驱动程序的问题。
在%systemroot%\ system32 \ spool \ drivers文件夹中运行查找,searchhpbmini.dll和hpcdmc32.dll。 这些文件的旧版本已知会导致打印中的重大问题。
你的Dispose()是你的PrintDocument对象吗? 这是MS .NET例子的一个频繁的遗漏。
检查应用程序代码。 确保打印机连接是在using
语句内部创build的。 否则托pipe代码不能保证及时closures它们,释放的速度可能取决于打印机驱动程序的性质(也就是说,不同型号的打印机可能是此深层问题的症状)。