DllHost.exe 获取 PrintTicket 时内存泄漏
DllHost.exe memory leak when getting PrintTicket
我有一个 x86 应用程序在 windows10(64 位环境)上工作。
该应用程序的一个功能是生成大量报告,因此涉及大量打印工作。
但是,我注意到每次我尝试在打印队列上调用 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 位进程来进行打印,因为很难将一个应用程序生成的报告发送到另一个应用程序。
非常感谢任何建议。
看来题目有点难。
只想分享我使用的解决方案,以防其他人遇到同样的问题。
最后我创建了一个单独的 x64 应用程序来处理打印。
最初我想使用 WCF 服务。但是,我 运行 遇到了 FixedDocuments 和 PrintQueue 的序列化问题。因此,单独的应用程序。
这个解决方案远非完美,在我看来一点也不好。但是,它解决了内存泄漏问题。
我有一个 x86 应用程序在 windows10(64 位环境)上工作。 该应用程序的一个功能是生成大量报告,因此涉及大量打印工作。 但是,我注意到每次我尝试在打印队列上调用 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 位进程来进行打印,因为很难将一个应用程序生成的报告发送到另一个应用程序。
非常感谢任何建议。
看来题目有点难。 只想分享我使用的解决方案,以防其他人遇到同样的问题。
最后我创建了一个单独的 x64 应用程序来处理打印。 最初我想使用 WCF 服务。但是,我 运行 遇到了 FixedDocuments 和 PrintQueue 的序列化问题。因此,单独的应用程序。
这个解决方案远非完美,在我看来一点也不好。但是,它解决了内存泄漏问题。