代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

何时使用ReleaseComObject与FinalReleaseComObject?[副本]

  •  21
  • C. Ross trotttrotttrott  · 技术社区  · 15 年前

    Marshal.FinalReleaseComObject Marshal.ReleaseComObject ?

    使用有危险吗 法警最终目标 ?

    1 回复  |  直到 13 年前
        1
  •  23
  •   Community Mohan Dere    8 年前

    有一些美德 FinalReleaseComObject ,它将更快地崩溃您的程序。““不能使用已与其底层RCW分离的COM对象”是CLR,它告诉您自己处理COM引用计数,而不是将其保留下来。CLR是一个错误。您的里程数可能会有所不同,当它在您的开发机器上工作时,您无法真正信任它是否正确。在将代码部署到客户的计算机上时,请确保实现良好的错误报告。

    优点是代码中只有一个地方出错了 最终删除对象 打电话来。当你使用 ReleaseComObject . 因为这将在一段时间内不被发现,当CLR调用final时会崩溃您的程序 IUnknown::Release() ,就是那个破坏物体的人。与错误的 打电话来。但这是世界末日的情景,更可能的结果是,这个电话没有任何区别,因为你错过了那些艰难的。就像 mumble["foo"]

    好吧,我的建议很明显:不要这样做。你在和一台 available here . “无声刺客”部分是最相关的。

    this answer