确保在.net类扩展到COM时调用Dispose
我向COM公开了一个.net类。该类继承自IDisposable,因为我需要清理一些非托管资源。在.net环境中,我会将类包装在一个using作用域中,以确保始终调用Dispose()。如果我使用COM包装器,是否有一些工具可以做到这一点?我正在从VB6初始化该类,我希望确保调用Dispose,或者我应该相信它最终会被CLR调用。Dispose不会自动调用,但会自动调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,确保在.net类扩展到COM时调用Dispose,.net,com,idisposable,.net,Com,Idisposable,我向COM公开了一个.net类。该类继承自IDisposable,因为我需要清理一些非托管资源。在.net环境中,我会将类包装在一个using作用域中,以确保始终调用Dispose()。如果我使用COM包装器,是否有一些工具可以做到这一点?我正在从VB6初始化该类,我希望确保调用Dispose,或者我应该相信它最终会被CLR调用。Dispose不会自动调用,但会自动调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,Dispose(bool
Dispose(bool disposing)
,该方法通过IDisposable.Dispose()中的true
和终结器中的false
调用。如果disposing为true,则应清理所有托管资源(如果需要)并调用GC。SuppressFinalize(this)
将不会自动调用Dispose,但将调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,Dispose(bool disposing)
,该方法通过IDisposable.Dispose()中的true
和终结器中的false
调用。如果disposing为true,您应该清理所有托管资源(如果需要)并调用GC.SuppressFinalize(this)
我的理解是(可能非常生锈)COM可调用包装器(CCW)在COM对象的refcount降至0时不会调用Dispose()
,它不再引用CLR对象
您需要要求对象的用户显式调用Dispose()
,如果用户不调用,则依赖终结器进行清理
以下是一些可能有帮助的其他想法:
Dispose()
,它不再引用CLR对象
您需要要求对象的用户显式调用Dispose()
,如果用户不调用,则依赖终结器进行清理
以下是一些可能有帮助的其他想法: