我有点困惑C#中析构函数的使用。据我所知,我们不能按照自己的意愿调用析构函数,它会在垃圾收集器自动调用之前对类(对象)执行一些工作,因此我想问如果我们在C#中使用析构函数,那么我们何时需要垃圾收集器?据我所知,析构函数可以处理内存,那么我们为什么需要垃圾收集器呢?
阅读有关正确实现IDisposable模式的方式也会很有用。它比我们想象的要复杂得多 -
我认为这里的混淆来自于你可以确定性地和非确定性地处理对象(即当GC开始处理时)。
回答你关于为什么我们需要GC的问题,我会说,即使不考虑内存泄漏,GC也是相当高效的,而立即回收内存的要求实际上可能会降低系统的总体性能。这类似于单线程与多线程之争的论点。
Dispose(bool disposing)
模式,但并没有解释“本地”和“托管”资源之间的区别。我曾经看到很多不必要地实现该模式以释放托管资源的类。 - Remus RusanuIDisposable
和using
模式,而不是终结器和析构函数。 - Remus Rusanu