我在使用System.Printing框架3.5的应用程序中使用.net库。当我使用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);发布于 2014-05-08 09:09:40
正在发生的情况是,从未调用PrintQueue的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方法。
https://stackoverflow.com/questions/23537009
复制相似问题