2010-10-12 36 views
4

我有一個長期的C#.NET 3.5應用程序「凍結」,我很茫然。有兩個C#可執行文件。一個有完整的UI,另一個作爲托盤應用程序運行。他們都通過WCF與第三個服務應用進行通信,該應用也在托盤中運行。調試阻塞的Windows消息循環的想法

隨機主Winforms應用程序的UI線程將死鎖。神祕的是,如果我退出托盤應用程序,這個應用程序的用戶界面將解鎖。

每當我將調試器連接到任一應用程序時,我什麼都不會有用。 UI線程在Application.Run方法的凍結應用程序中被阻止。所有其他線程或者正在休眠,或者在調用UI線程時被阻塞。

神祕地另一個像Photoshop一樣運行的應用程序會表現出奇怪的行爲,而這種僵局已經到位。退出托盤應用也會對此進行分類。

我可以推論的是,主要的Windows級別的消息泵出了問題,但我並不真正瞭解如何進一步調試。我已經安裝了框架源代碼,可以看到膠着應用是停留在一個while循環中:

Application.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop

,但真的不知道夠做任何事此信息。

有沒有人有任何建議在哪裏看得更遠?我一直在追逐這個隨機的僵局錯誤數月。

感謝, 尼克

+1

該問題可能與WCF有關。你如何主辦服務?你使用雙工通信嗎? – 2010-10-12 12:16:25

+0

是的,我們正在使用雙工WCF。我們剛剛將代碼移植到了.NET 4中,但仍然看到了這個問題,儘管不太經常。 隨着WCF我做一些事情,使每個連接都有它自己的實例: [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,UseSynchronizationContext =假,InstanceContextMode = InstanceContextMode.PerSession)] 和回調普遍得到放入排隊系統,所以他們不應該阻止。即使沒有發生回調或服務調用,這個問題似乎也會發生,除了可能每5分鐘發生一次「保持活躍」的Ping。 – Mocl 2010-11-02 10:12:08

回答

2

我認爲這可能是一個紅色的鯡魚,因爲這是一個在Visual Studio SDK所以真的是你的調試凍結。

我不得不調試一些工作相關/工作無關的凍結,他們是非常非常討厭,需要細緻的儀器和代碼審查。所以要耐心等待!

下面是諮詢了幾件從我:

1)你會看到在路上幾個紅鯡魚,所以要小心不要讓竊聽看不起他們,混淆問題的表現與原因本身。

2)這個凍結的時機是什麼?多久時間?一個TCP連接超時通常需要23秒,而數據庫連接超時30,一個命令120秒(在不同的設置可能會有所不同),所以所需要的時間是一個很大的線索。如果它本身無法解決,並且您必須關閉一個應用程序才能擺脫它,那幾乎肯定是線程或數據庫死鎖。

3)使用sysinternal的進程管理器和進程監視器來查看他們正在做什麼以及他們在什麼時候凍結。最後一個聖禮可能不會總是給你一個提示。

4)我知道,讓你找到問題的axact位置,從那時起,它通常需要幾個小時到幾天來發現問題,將需要一段時間,但開始寫在你的代碼跟蹤。 5)如果你有更多的信息,發表另一個問題,並讓我知道。

+0

謝謝你。因爲它是隨機的,你可能幾天沒有看到它,這是非常煩人的,但我會給這些想法一個去。再次感謝。 – Mocl 2010-11-02 10:14:16

+0

沒有probs。如果你有更多的信息,但仍然沒有解決方案,分享,我會看看。 – Aliostad 2010-11-02 10:16:41