系统.印刷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.AddJob方法消耗内存,并且在打印文档后不释放

实际情况是PrintQueueDispose()方法从未被调用。

如果不发生这种情况,它将不会释放任何非托管资源,也不会让垃圾收集器清理它。

更多信息参见:

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方法