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

C# System.Printing Printqueue.AddJob方法会消耗内存,并且在打印文档后不会释放,c#,.net,system.printing,.net-3.5,C#,.net,System.printing,.net 3.5,我在.NETFramework 3.5的应用程序中使用System.Printing库。当我使用PrintQueue.AddJob在任何打印机上打印作业时,内存会增加,但不会释放它。仅当应用程序关闭时,才会释放内存。 如果我打印的作业超过10个,那么我的应用程序就会占用我电脑的所有内存,最后一切都会变慢。 我发现内存使用量达到2GB,这是不可接受的。 经过调查,我发现调用PrintqQueue.AddJob方法时内存会增加 以下是我的打印示例代码: PrintServer printServer

我在.NETFramework 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);

发生的情况是从未调用PrintQueue的Dispose方法

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

有关更多信息,请参阅:

完成对打印队列的寻址后,可以手动调用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方法。

您是否尝试调用GC.Collect?@golergka如果可能,最好避免手动垃圾收集@Sagar PrintQueue是否实现IDisposable?好吧,这只是一个了解发生了什么的建议。特别是在这种情况下,这不会有什么区别,因为如果从未调用PrintQueue上的dispose方法,即使手动强制垃圾收集,也不会释放其资源;我试过收集,但它不能释放内存