0

我有一个在 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 位进程仅用于打印,因为很难将在一个应用程序中生成的报告发送到另一个应用程序。

非常感谢任何建议。

4

1 回答 1

0

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

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

如果远非完美,而且在我看来,解决方案一点也不好。但是,它解决了内存泄漏问题。

于 2020-12-23T12:51:48.073 回答