如何从C#.NET强制释放COM服务器对象

时间:2010-10-21 11:36:43

标签: c# .net asp.net dcom

如果特定条件失败或对象部分构造,我是否可以知道如何从C#.NET强制释放COM服务器对象?

问题是我使用的是使用DCOM机制的COM服务器;在最坏的情况下,当对象未完全创建并且我从失败时退出应用程序时,COM对象仍然在内存中(在COM +应用程序组件服务中显示)。如果超出某些限制,则会导致内存泄漏和崩溃。但如果其可管理的失败数量,它会在某些时间点后被删除。

样品: - Calculator.App objApp = new Calculator.App();

if(!obj.CanBeUsed()) { //如何释放COM对象objApp }

注意: Garbase Collector使用GC.Collect()方法强制从堆内存中取消分配。我是否可以使用这种方法或.NET franework为这种特殊情况提供任何其他解决方案?

2 个答案:

答案 0 :(得分:2)

像这样:

System.Runtime.InteropServices.Marshal.ReleaseComObject(objApp);

答案 1 :(得分:1)

您应该尝试Marshal.FinalReleaseComObject方法。

  

FinalReleaseComObject方法   将管理引用发布到a   COM对象。调用此方法是   相当于调用   循环中的ReleaseComObject方法   直到它返回0(零)。

     

当COM上的引用计数时   对象变为0,COM对象是   通常被释放,虽然这取决于   关于COM对象的实现和   超出了运行时的控制范围。   但是,RCW仍然存在,   等待垃圾收集。

     

之后无法使用COM对象   已与其基础分离   RCW。如果您尝试调用方法   RCW在引用计数之后   变为0,为InvalidComObjectException   将被抛出。