【问题标题】:DllHost.exe memory leak when getting PrintTicket获取 PrintTicket 时 DllHost.exe 内存泄漏
【发布时间】:2020-12-15 08:57:18
【问题描述】:

我有一个在 windows10(64 位环境)上运行的 x86 应用程序。 该应用程序的一个功能是生成大量报告,因此涉及大量打印。 但是,我注意到每次我尝试在打印队列上调用 DefaultPrintTicket 时,dllhost 进程(COM Surrogate)都会在内存中增长。

我设法隔离了负责的代码并将其移至测试 WPF 应用程序。单击按钮时,将触发此代码:

var localPrintServer = new LocalPrintServer();
var oneNotePrintQueue = localPrintServer.GetPrintQueues().FirstOrDefault(p => p.Description.Contains(OneNote));
var printTicket = oneNotePrintQueue?.DefaultPrintTicket;

打印队列无关紧要,因为我都试过了,但问题仍然存在。 我知道这可能与以下内容重复:PrintTicket DllHost.exe Memory Climbs

但是,那里提供的解决方案不起作用,因为 PrintTicked 不是 IDisposable 对象。 我还尝试在注册表中进行一些调整(即查找 AppId AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0 并删除“AccessPermission”、“LaunchPermission”和“RunAs”),但没有结果。

我无法将应用程序重建为 AnyCpu,并且我希望避免创建一个单独的 64 位进程仅用于打印,因为很难将在一个应用程序中生成的报告发送到另一个应用程序。

非常感谢任何建议。

【问题讨论】:

    标签: wpf printing printqueue dllhost


    【解决方案1】:

    题目好像有点难。 只是想分享我使用的解决方案,以防其他人遇到同样的问题。

    最后,我创建了一个单独的 x64 应用程序来处理打印。 最初我想使用 WCF 服务。但是,我在序列化 FixedDocuments 和 PrintQueue 时遇到了问题。因此是单独的应用程序。

    如果远非完美,我认为该解决方案根本不好。但是,它解决了内存泄漏问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      相关资源
      最近更新 更多