我的托管应用程序通过托管包装器消耗本机COM dll公开的旧版功能。我无法更改COM dll及其托管包装。
我觉得我在我的应用程序层中错过了很多我希望看到的API,以确保正确释放非托管资源。
问题是我是否理解这一点:
鉴于应用程序层不再引用托管包装器中的对象,该托管对象使用的基础本机对象无法被释放,直到暴露的清理方法明确地这样做。
我是否正确?
答案 0 :(得分:1)
不,这不太正确。当垃圾收集器收集引用COM类型的托管类型时,将使用COM Release
调用取消引用这些引用。在这一点上,假设没有其他东西引用COM对象实例,将释放非托管资源。
然而,除非你打电话给GC.Collect()
(这是一件相当严苛的事情),否则这些非托管资源可能会被保留很长时间,远远超过必要的时间。