繁体   English   中英

System.Printing Printqueue.AddJob方法消耗内存,并且在文档打印后不会释放

[英]System.Printing Printqueue.AddJob methods consumes memory and doesnt releases once the document is printed

我在.net framework 3.5的应用程序中使用System.Printing库。 当我在使用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);

发生的事情是从未调用过PrintQueueDispose()方法。

如果这没有发生,它将不会释放任何非托管资源,也不会让垃圾收集器对其进行清理。

有关更多信息,请参见:

http://msdn.microsoft.com/zh-CN/library/ms584331(v=vs.110).aspx

解决完打印队列后,可以手动调用Dispose() ,也可以using如下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方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM