2012-01-27 67 views
7

難住了。之前發佈過類似的問題。我們有一個非常大的WPF應用程序,在某些機器上運行良好,但在其他機器上,突然之間,其中一個CPU內核被鎖定爲100%(僅一個內核),應用程序凍結。當顯示上下文菜單或組合框下拉菜單(即Popup控件)時,通常會發生這種情況,這就是爲什麼我們無法調試此功能,因爲當時沒有用戶代碼正在執行。它讓我們瘋狂,因爲再次,在大多數機器上運行良好,但只有少數機器會凍結。什麼原因WPF應用程序可以固定CPU並將應用程序鎖定在某些計算機上而不是其他計算機上?

奇怪的是,當我們在虛擬機中運行它,它運行偉大有太多!瘋!不知道是什麼導致了這一點,或者更重要的是,甚至在哪裏開始看,因爲正如我所說的,沒有用戶代碼正在運行。

這發生在只有10%左右我們的機器,但它始終發生在那些機器。所有的都是乾淨的(即相對較新的操作系統安裝,沒有瘋狂的應用程序等),大多數是相同的機器spec-wise:類似的CPU,類似的內存,相同的視頻驅動程序和服務包。

所以我在標題所說,任何人都可以提出可能的原因,一個WPF應用程序將針CPU和鎖定某些計算機而不是其他的應用程序?我們只是難住!

+0

上下文菜單?也許顯示一些代碼。對於ComboBox同樣的問題。你嘗試了很簡單的上下文菜單/組合框?既然都是彈出窗口,你是不是試圖展示一個彈出窗口來查看這是否是核心問題?可能是圖形卡/圖形驅動程序相關的,因爲在VM圖形管理變更,但你說,這兩個圖形設置是相同的...也許(再次看到問題來自哪裏)嘗試強制軟件渲染。 – GameAlchemist 2012-01-27 03:52:09

+0

沒有代碼顯示。帶有幾個附加命令的簡單標準上下文菜單。檢查了'CanExecute'處理程序,那裏也沒有什麼奇怪的。此外,它們不存在組合框。順便說一句,我純粹猜測Popup,但這似乎是一個普遍的事情。不過,再次發生這種情況時,一切都會凍結,甚至VS.如果這是一個代碼問題,我應該仍然能夠進入它。這不是VS問題,因爲這也發生在沒有找到VS的已安裝應用程序中。大約5-10%的機器出現這種情況,但始終如一。 – MarqueIV 2012-01-27 04:15:25

+0

[WPF Performance Suite](http://msdn.microsoft.com/zh-cn/library/aa969767.aspx)有一些工具可幫助您找出問題的根源。 – 2012-01-27 05:22:16

回答

7

找到它!結果發現在.NET 4.0中有一個關於UI自動化和MS引入的更改的錯誤。這是信息和修復! (注意:即使您打電話給MS,他們也會向您發送一個鏈接,但它始終是一個斷開的鏈接,我設法手動跟蹤這個)

注意:他們的文章談論導致此行爲的特定情況,但如果你谷歌周圍,你會看到與這些DLL相關的掛起問題。最新的是他們有希望在.NET 4.5運行時修復(在這個問題上從MS帖子。)

這裏的知識庫文章...
http://support.microsoft.com/kb/2484841/en-us

...這裏是實際的修補程序。在XAML或代碼後面或兩者定義
http://archive.msdn.microsoft.com/KB2484841/Release/ProjectReleases.aspx?ReleaseId=5583

0

Crappy視頻驅動程序?拉兩臺機器 - 一個發生,一個不發生,然後開始分析差異。可能是硬件缺陷,壞視頻驅動程序,該領域的任何事情。如果有人在場,WPF會使用G​​PU進行渲染。

+0

是的,正如我上面所說的,我們已經已經試過了。即使在幾乎完全相同的筆記本電腦上,我相信甚至顯卡都是完全一樣的,同樣的驅動程序,我們甚至重新安裝以防萬一,它仍然發生在一個而不是另一個。我們真的很難過。 – MarqueIV 2012-01-27 05:34:29

0

因爲你似乎很缺乏選擇,我會建議做一個新的項目,在Window只是最基本的組合框,什麼也沒做。這應該工作(檢查:-))。然後,您可以在ComboBox中逐個添加功能並測試,例如,添加命令時,從空的一個開始。做到這一點,直到「休息」。所以你知道哪個功能是罪魁禍首。
你並沒有說如果所有的軟件都在使用渲染。

+0

渲染很好。這個應用程序是在三年內由20人組成的團隊創建的。我們準備發佈。即使與你所說的相反,在幾周甚至幾個月的時間內也是非常耗時的。在這個應用程序中發生的事情太多了......主要是處理器密集型的,而不是用戶界面密集型的。儘管如此,該應用程序很快,然後你右鍵點擊某個東西,然後砰!壁。 – MarqueIV 2012-01-27 11:19:59

+0

我明白你有一個很大的應用程序。但對於測試測試,我建議不需要質量代碼/源代碼控制/ ...做簡單的簡單文件複製/剪切粘貼直到錯誤顯示肯定不需要幾個月或一週。 另一個類似的想法可能是在你的應用程序中使用具有相同接口但不做任何事情的模型類,並將函數逐一連接到「真實」函數。這個映射可以通過界面中的複選框列表來啓用或不是一個一個啓動。 – GameAlchemist 2012-01-27 12:10:54

相關問題