【发布时间】:2009-05-20 10:00:05
【问题描述】:
我有一个进程外 COM 对象,我们使用 dllhost 从 C# 调用(我们无法使用 COM+)。这很好用,而且我有自己的对象池,可以随时使用。 COM 对象将被多次重复使用并且运行时间很长(有时超过 20 分钟)。不幸的是,这是一个偶尔挂起的旧 VB ActiveX dll。所以,我需要能够杀死它。我尝试过显式释放 COM 对象,然后从另一个线程进行垃圾收集,但这无济于事。除了获取 dllhost 的 PID 并在我启动它时将其杀死(可能不那么安全)之外,还有其他人有什么想法吗?感谢您的帮助。
我试过了
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_MyObj);
GC.Collect();
GC.WaitForPendingFinalizers();
m_MyObj = null;
我创建它
uint hResult = Ole32Methods.CoCreateInstance(ref CalcServerGuid, null, (uint)CLSCTX.CLSCTX_LOCAL_SERVER, ref IID_IUnknown,
out CalcServerInstance);
【问题讨论】:
-
也许这表明是时候将旧的遗留组件移植到 .NET 了?
-
我希望。数十名工程师重写这将需要数年时间。 :(