2010-08-11 126 views
0

我想了解的對象在.NET世界中創建爲反對在非託管代碼環境(VB6等).NET對象生命週期壽命VS非託管代碼

從我的理解時,通過使用新的keyowrd來創建一個對象,讓它說C#,將引用變量放置在託管堆中,直到垃圾收集器採取主動措施檢查對象是否仍然有對其的引用。如果不是,它會被銷燬。這是否意味着GC始終在運行?這不是一個昂貴的過程?

有人可以解釋更好嗎?

這在umnanaged代碼environemnt中有何不同?

回答

1

GC不會連續運行。它按需運行,這意味着如果不首先釋放內存,則無法填充內存請求。所以不,這不是一筆巨大的開支。在服務器端,它可以在後臺運行。 (我似乎記得這將會擴大,現在有更多的多核系統可用?)

對於大多數應用程序,GC對非託管代碼是一個巨大的改進。沒有引用計數,也不需要跟蹤可能需要釋放對象的所有路徑。當它不再被引用時,它變得可收集。這極大地簡化了編碼,並且內存泄漏幾乎(不完全)是過去的事情。

+0

+1,但服務器GC不*在後臺運行。 – 2010-08-11 13:14:15