2010-09-01 49 views
3

當運行時啓動垃圾回收時,它暫停所有託管線程。我的應用程序同時具有託管和非託管組件。在運行時執行垃圾收集活動時,來自非託管代碼的本地線程可能會進入托管代碼。垃圾回收時的本機線程行爲

.net如何處理? .net會暫停本地線程或其他事情發生?

回答

4

據我所知,託管線程被掛起的原因是託管堆可能在收集過程中被壓縮。如果發生這種情況,必須調整對管理對象的引用。我認爲你的本地線程沒有使用託管堆上的對象,因此不應該受垃圾回收的影響。

如果您的本機線程訪問被管理對象,則應該固定這些對象。這會阻止GC在壓實過程中移動物體。

+0

因此.ney不會暫停在捕獲garabage時進入托管代碼的本地線程。我的理解是否正確? – Maanu 2010-09-01 04:00:57

+0

@Maanu:我的理解是隻有託管線程被掛起。 SSCLI書特別指出,只有託管線程被暫停,但在這一點上很難找到確切的信息。 – 2010-09-01 04:33:48

+0

@Maanu:如果GC正在進行,運行時將暫掛線程在轉換回託管代碼。 – 2010-09-01 04:34:57