确保在.net类暴露给COM时调用Dispose

时间:2010-08-18 21:08:06

标签: .net com idisposable

我向COM公开了一个.net类。该类继承自IDisposable,因为我需要清理一些非托管资源。在.net环境中,我将我的类包装在一个使用范围内,以确保始终调用Dispose()。如果我使用COM包装器,是否有一些工具可以做到这一点?我正在从VB6中对类进行实例化,我想确保调用Dispose,或者我应该相信它最终会被CLR调用

2 个答案:

答案 0 :(得分:1)

不会自动调用Dispose,但终结器会自动调用。如果您有非托管资源而不需要清理,请实现调用Dispose()的终结器。通常的做法是使用来自IDisposable.Dispose()的Dispose(bool disposing)和来自终结器的true来调用false。如果处置为true,则应清理所有托管资源(如果需要)并调用GC.SuppressFinalize(this)

答案 1 :(得分:0)

我的理解(可能相当生疏)是COM可调用包装器(CCW)在COM对象的引用计数降为0时不调用Dispose() - 它不再引用CLR对象。

您需要要求对象的用户显式调用Dispose()并依赖终结器进行清理,如果他们不这样做。

其他一些可能对此有所帮助的想法:

相关问题