系统.印刷Printqueue.AddJob方法消耗内存,并且在打印文档后不释放
本文关键字:打印 文档 释放 AddJob Printqueue 印刷 方法 内存 系统 | 更新日期: 2023-09-27 18:02:23
我正在使用系统。打印库在我的应用程序与。net框架3.5。当我使用PrintQueue在任何打印机上打印作业时。AddJob内存增加,但不释放。只有当应用程序关闭时才释放内存。如果我打印超过10个作业,那么我的应用程序就会占用我计算机的所有内存,最后一切都会变慢。我观察到内存使用量达到了2GB,这是不可接受的。经过调查,我发现内存增加时,PrintqQueue。AddJob方法被调用。
下面是我打印的示例代码:PrintServer printServer = newPrintServer(@"''sshinde");
PrintQueue PrintQ = newPrintQueue(printServer, "HP_Printer", PrintSystemDesiredAccess.AdministratePrinter);
PrintQ.AddJob("xyz", @"C:'ProgramData'MyComapny'PrintSoftware'Config'Print_Manager'INPUT'd7a8a71b-4e73-43ec-8ee9-bbe24b3ba2cb.xps", false);
实际情况是PrintQueue
的Dispose()
方法从未被调用。
如果不发生这种情况,它将不会释放任何非托管资源,也不会让垃圾收集器清理它。
更多信息参见:
http://msdn.microsoft.com/en-us/library/ms584331 (v = vs.110) . aspx
当你完成打印队列的寻址时,你可以手动调用Dispose()
,或者用using
语句封装它,像这样:
using(PrintServer printServer = newPrintServer(@"''sshinde"))
{
using(PrintQueue PrintQ = newPrintQueue(printServer, "HP_Printer", PrintSystemDesiredAccess.AdministratePrinter))
{
PrintQ.AddJob("xyz", @"C:'ProgramData'MyComapny'PrintSoftware'Config'Print_Manager'INPUT'd7a8a71b-4e73-43ec-8ee9-bbe24b3ba2cb.xps", false);
}
}
一旦using
语句内的语句完成,Dispose
方法将被调用。
using
语句的优点是,即使发生异常,它也会调用dispose方法