了解.NET的垃圾收集器/底层CLR

时间:2013-02-25 17:41:36

标签: .net c#-4.0

您是否可以向我指出一些书籍或网站,详细介绍(深入)CLR和& S中使用的基础机制和接口。 .Net Framework的垃圾收集器(比如说4.0及以上版本)?

我最终试图学习如何指望垃圾收集器认为托管项目在与包含所述项目的非托管列表进行对话时已被标记,并且觉得我可能需要在远程成功之前学习一点。

3 个答案:

答案 0 :(得分:4)

我在内部读到的最好的文章之一是MSDN Magazine Issue 2005 May - JIT and Run – Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects

了解内幕的好书是Jeffery Richter的CLR Via C#

虽然它停留在v2.0运行时内部,但SSCLI (e.g. Rotor)仍然非常适合理解.Net 4.x内部。虽然它与生产运行时间存在差异,但很多概念都是相同的。

4.0和4.5中的GC确实已经发展,其中一位工程师Maoni Stephens让我们及时了解更新,包括背景并发和持续的低延迟。

就您的具体需求而言,实际上只有两种情况:您正在使用PInvoke服务,在这种情况下,您无需担心GC会影响本机的托管对象,因为PInvoke需要注意这对你来说,以及你必须明确地将对象固定在GC堆上的情况,因为否则它可以在非托管代码中使用时移动或收集。为此,您可以使用C#fixed或C ++ / CLI pin_ptr或使用GCHandle

答案 1 :(得分:1)

来自Sasha Goldshtein的

Pro .NET Performance有一整章致力于垃圾收集器。他以非常详细和准确的信息涵盖了这一主题。

Pro .NET Performance Link

正如其他人提到杰弗里里希特的CLR via C# - 第4期(4.5更新,虽然GC部分没有改变很多)最近出版,我也可以推荐你。

答案 2 :(得分:0)

msdn documentation始终是一个很好的信息来源。