1

我有一个使用外部 COM 组件的服务器应用程序,它似乎正在泄漏内存。我没有这个组件的源代码,也没有任何调试或修改它的方法,经过足够的时间后,它会使服务器陷入瘫痪。

我想将 COM 功能移出进程,这并不困难(传递CLSCTX_LOCAL_SERVER而不是CLSCTX_INPROC_SERVER传递CoCreateInstance)但有一个问题:服务器正在从不同的线程创建 COM 对象的多个实例,时间这样可能最终不会有 0 个实例处于活动状态足够长的时间以泄漏足够的内存以使进程外主机崩溃。

显而易见的解决方案是让每个人都CoCreateInstance产生自己的进程外服务器。但是我在这方面看到的所有资源,包括关于 SO 的一个问题,似乎都要求您有权访问创建 COM 对象的 DLL 的源代码。这不是这里的情况。

CoCreateInstance那么,当您唯一能够更改的是正在调用的程序的代码时,有没有办法让每次调用都产生一个新的进程外代理CoCreateInstance

(请不要使用基于 C++ 模板库的解决方案,因为有问题的服务器是用 Delphi 编写的。)

4

0 回答 0