1

我想知道这些函数的调用顺序。就像我们的堆满了,GC 就会被调用。它将标记对象并调用其终结操作,现在我们有扫描阶段.. 在该阶段对该对象的引用被删除并且对象变得不可访问.. 那么销毁在哪里进入循环......当它被调用时。 .那它在做什么....

4

4 回答 4

2

有很多很多文档解释了 .NET 垃圾收集器的工作原理。这里有几个开始:

http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

http://msdn.microsoft.com/en-us/library/ms973837.aspx

http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/

于 2010-02-14T17:34:05.847 回答
2

C#/.NET 中没有“析构函数”,尽管该术语过去似乎与“终结器”互换使用。

大多数时候,你也不应该实现终结器。您需要使用这些的主要实例是该类是否保留非托管资源,在这种情况下您应该实现该IDisposable模式(从技术上讲,您可以调用Dispose“析构函数”,但它实际上并没有释放堆上的任何内存,这是讨论内存管理时的一个重要区别)。

不要在内存管理方面事后猜测 GC。只需确保释放您使用的任何非托管资源(文件句柄等)。如果你看到有人使用析构函数这个词,他们的意思可能是终结器。

于 2010-02-14T15:42:16.907 回答
2

我必须推荐这个的来源。 C# 编译器团队的Eric Lippert最近就这个主题发表了一篇文章: 析构函数和终结器有什么区别?

从他们接受的定义来看,他们在 C# 中实际上是倒退的。阅读他的帖子,我无法更好地描述它。

于 2010-02-14T15:44:11.627 回答
1

关于 .Net 内存管理的非常好的视频位于.Net 内存管理。这将有助于消除您对终结器以及何时调用它、如何调用它等的疑虑。

于 2010-02-14T17:48:15.887 回答