2013-02-25 36 views
1

您能否指點我一些書籍或網站,詳細說明CLR的底層機制和接口:.Net Framework的垃圾收集器(例如4.0及以上版本) ?瞭解垃圾收集器/ .NET的底層CLR

我最終試圖學習如何征服垃圾收集器,使其認爲託管項目在與包含所述項目的非託管列表交談時被標記,並且感覺我可能需要在遠程成功之前學習一下。

+2

這是什麼意思的「標記」在這種情況下 - 標記爲收集,標記爲固定? – 2013-02-25 17:44:03

+0

一本好書將通過C#進行CLR,但我不確定我完全理解你想要做什麼。如果您提供更多信息,那麼可能有人會回答您可能具有的任何具體問題。 – 2013-02-25 17:50:06

回答

0

msdn documentation始終是一個很好的信息來源。

+0

http://meta.stackexchange.com/q/8231 – delnan 2013-02-25 17:44:03

+2

他要求鏈接到描述它的書或文檔。我提供了這些信息。 – 2013-02-25 17:44:36

4

我在內部閱讀過的最好的文章之一是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

Pro .NET Performance來自Sasha Goldshtein有整個章節致力於垃圾收集器。他用非常詳細和準確的信息涵蓋了這個話題。

Pro .NET Performance Link

至於別人提到CLR via C#從傑弗裏裏希特 - 4(更新4.5雖然GC部分並沒有改變很多)版最近就出來了,我也可以推薦你。