如果特定条件失败或对象部分构造,我是否可以知道如何从C#.NET强制释放COM服务器对象?
问题是我使用的是使用DCOM机制的COM服务器;在最坏的情况下,当对象未完全创建并且我从失败时退出应用程序时,COM对象仍然在内存中(在COM +应用程序组件服务中显示)。如果超出某些限制,则会导致内存泄漏和崩溃。但如果其可管理的失败数量,它会在某些时间点后被删除。
样品: - Calculator.App objApp = new Calculator.App();
if(!obj.CanBeUsed()) { //如何释放COM对象objApp }
注意: Garbase Collector使用GC.Collect()方法强制从堆内存中取消分配。我是否可以使用这种方法或.NET franework为这种特殊情况提供任何其他解决方案?
答案 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 将被抛出。