1

我在我的应用程序中使用 System.Printing 库和 .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);
4

1 回答 1

0

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

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

有关更多信息,请参阅:

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);
  }
}

一旦语句中的语句完成,该Dispose方法就会被调用using

该语句的优点是,即使发生异常using,它也会调用 dispose 方法。

于 2014-05-08T09:09:40.913 回答