我有一个c#的com类,被未托管的代码使用。我可以调试它,但是我无法知道何时对象被释放。如果它是用c++实现的,在析构函数中会被调用,在c#中则会被释放到GC中。是否有任何方法来跟踪这一时刻呢? 提前感谢。
我有一个c#的com类,被未托管的代码使用。我可以调试它,但是我无法知道何时对象被释放。如果它是用c++实现的,在析构函数中会被调用,在c#中则会被释放到GC中。是否有任何方法来跟踪这一时刻呢? 提前感谢。
维护非托管资源的托管类型应该实现IDisposable接口。这告诉您代码的使用者,当他们完成对对象的使用时(即在可能的情况下将它们包装在using
块中),他们需要调用Dispose()
。
IDisposable
的适当实现将在其终结器中释放本机资源,但客户端可以更早地调用Dispose()
以确定性地释放非托管资源。无论哪种方式,都可以避免泄漏,但尽快调用Dispose()
是更好的选择。
这里有一个SO问题详细介绍了这个过程。