代码之家  ›  专栏  ›  技术社区  ›  Snabak Vinod

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

  •  0
  • Snabak Vinod  · 技术社区  · 15 年前

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

    问题是,我使用的COM服务器使用的是DCOM机制;最坏的情况是,当对象没有完全创建,并且由于失败而退出应用程序时,COM对象仍在内存中(显示在COM+应用程序组件服务中)。如果超过某些限制,就会导致内存泄漏和崩溃。但是,如果它的失败数量可以控制,那么它会在某个时间点后被删除。

    样品: calculator.app objapp=新计算器.app();

    如果(!)obj.canbeused()) { //如何取消分配COM对象objapp }

    注: Garbase Collector使用一个方法gc.collect()强制从堆内存中取消分配。我是否可以使用此方法或.NET franework正在为这个特定的案例提供任何其他解决方案?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Aamir    15 年前

    这样地:

    System.Runtime.InteropServices.Marshal.ReleaseComObject(objApp);
    
        2
  •  1
  •   Jakub Å turc    15 年前

    你应该试试 Marshal.FinalReleaseComObject 方法。

    finalReleaseComObject方法 将托管引用释放到 COM对象。调用此方法是 相当于调用 循环中的ReleaseComObject方法 直到它返回0(零)。

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

    之后不能使用COM对象 已从其底层分离 RCW。如果你试图调用一个方法 参考计数后的RCW 变为0,InvalidComObjectException 将被抛出。

    推荐文章