2011-09-30 34 views
4

我正在進入一個有已知問題的項目。該應用程序掛在GC.WaitForPendingFinalizers的電話上。明顯的 解決方案 解決方法是刪除WaitForPendingFinalizers調用,但不幸的是,這是我們在第三方程序集中完成的,因此不能選擇刪除。確定待定終結器來源

相反,我想找到問題的根源,並找出誰是終結者阻止。然而,代碼庫很大,而且我剛剛進入它,它也不熟悉,所以我甚至沒有任何可能的直覺或直覺。這意味着我將需要使用工具和工具來幫助找到它。

所以我的問題是:

  1. 將被迭代終結隊列框架/ EE線顯示在線程演播室觀看?這樣的堆棧跟蹤將很快找到我們掛在哪裏。
  2. 是否有一個工具可以顯示未完成的終結符和它們的根(這是一個CF項目,但我願意嘗試找到它)?
  3. 任何人有任何想分享的想法或經驗可能有助於找到它?

回答

1

我在VS(VS 11)中快速瀏覽了一下,當我打破時,我可以看到一個名爲「GC Finalizer Thread」的線程,它在我的析構函數中執行了Sleep()。

但是你提到CF可能會使它成爲一個完全不同的球賽。

+0

是的,對我來說沒有「GC Finalizer Thrad」,儘管在完整框架下的存在至少讓我看到了代碼庫的CF->桌面端口的挑戰(讓我們希望它接口良好)。 – ctacke

+1

只是一個想法,但如果你在某處插入一個dtor並在其中放置一個斷點?應該打破這個線程。 –

+0

這是一個很好的想法,我相信我會嘗試。謝謝。 – ctacke