如何知道是谁破坏了一个物体

本文关键字:一个 何知道 是谁 坏了 | 更新日期: 2023-09-27 18:03:47

我试图理解一个重要对象的析构函数在哪里被调用。我做了一个显式的,以便记录导致它的堆栈跟踪。

但是new StackFrame(1).GetMethod().Name;抛出NullReferenceException,我不确定我可以使用这种方法,因为析构函数(~MyClass(){})不是由应用程序显式调用的(无论如何,我认为你不能)。

是否有办法知道导致对象销毁的堆栈跟踪?

谢谢!

如何知道是谁破坏了一个物体

你的问题没有意义。
托管对象永远不会显式地析构。

相反,垃圾收集器将在最后一次引用被释放一段时间后收集每个对象。
如果对象有终结器, GC将在收集对象之前在GC线程上运行它。

终结器(也就是您正在编写的,它们不是析构函数,尽管它们可能使用与c++中的析构函数相同的语法)在垃圾收集器拥有的线程上调用。在堆栈跟踪中没有任何与您相关的内容,即使您可以得到它。

通常没有办法知道什么事件导致对象的销毁,因为在。net中对象销毁是不确定的。GC偶尔会检查哪些对象仍然是可访问的。任何不可访问的对象都将释放其内存。

相关文章: