2012-01-11 77 views
18

我們有一個用.Net 4.0編寫的C#WPF應用程序,它有一些相對簡單的數據綁定和網格功能。WPF C#應用程序性能

造型包含一些「調整」,包括一些懸停顏色等。

在3臺機器上,我們遇到了一些非常奇怪的用戶界面性能問題。

實際上,重新啓動後,應用程序運行良好,但經過一定的(未確定的)時間後,UI變得令人難以置信的緩慢。例如,將鼠標懸停在按鈕上,在懸停顏色樣式應用/呈現之前會有幾秒鐘的延遲。

該機器具有幾乎相同的規格。圖形驅動程序已更新,星號設置是兩個NVidia Quadro 290卡。此外,我們製作了一個僅包含一些測試UI組件(包括Fluent Ribbon)並且沒有代碼的「測試」應用程序。問題仍然存在。

我已經運行Windows Performance Suite來深度運行運行時間WPF,並且非常奇怪的是,如果勾選「禁用髒區域支持」選項,UI將返回正常響應。我的理解是,如果有的話,這應該會進一步降低性能!

我在這裏嘗試其他任何東西的損失。 DotTrace性能分析表明大部分應用程序時間都花在PresentationFramework.dll中。

[編輯]所有機器都是Windows XP SP3。

[編輯]這可能發生在所有機器上,並且應用程序通常不允許運行足夠長的時間來解決問題。我們現在正在測試這個。

[編輯]我還應該指出,我們正在試驗修補程序詳細的here。目前它已安裝在單臺機器上,我會相應更新。

[編輯 - 24小時後]因此,兩臺機器現在已經在一夜之間運行相同的代碼。在我的機器上(從來沒有證明這個問題),在初次登錄應用程序後非常緩慢,但不到一分鐘後恢復正常。 (我把它放在機器上清楚地將東西從硬盤上取下來)。在另一臺機器上(這通常表明問題),幾秒鐘後應用程序改善,但與我的相比,現在仍然不振。

[EDIT - 48小時後]在試驗機,測試應用現在是48小時運行後完全沒有反應(鎖定)。在同一臺機器上,一個輕量級的'外殼'WPF應用程序(包含一個選項卡控件,一些按鈕和一些面板和網格)仍在運行並且完全響應。因此,這些更復雜的控件中的某些內容會導致此問題......這確實會指向可能是根本原因的(可能)觸發器和委託。我會再次分析應用程序/控件。同時,有沒有人有任何關於如何確保應用程序定期自行清理的建議?因爲我們在這裏查看第三方控件,所以我的編輯選項是有限的!

希望能提供任何提示!

+0

是否可以提供代碼?另外一些SO'er可能也想嘗試一下。 問題出現之前的最短時間是多少? – Default 2012-01-11 12:30:56

+0

如果需要,我可以提供代碼......但我們的測試應用程序目前僅涉及僅使用Fluent功能區(可從CodePlex中載入)和空網格。除了明顯的init調用之外,沒有任何代碼。如果它能使生活更輕鬆,我當然會提供這種壓縮。 – Nick 2012-01-11 12:34:40

+0

不要期望太多的原型系統。作爲第一步,我會檢查代表使用情況。你經常使用嗎? – 2012-01-11 12:34:52

回答

2

嘗試在軟件模式下呈現wpf。

在Loaded事件

HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; 
HwndTarget hwndTarget = hwndSource.CompositionTarget; 
hwndTarget.RenderMode = RenderMode.SoftwareOnly; 
+0

我試過這個。我應該指出,這個問題在應用程序重啓時仍然存在。所以,如果緩慢,我已經嘗試用SoftwareOnly標誌重新佈局它,將它部署到目標機器,並且它仍然很慢。只有重啓才能改善! – Nick 2012-01-11 13:03:53

+0

流利的功能區是否使用分層窗口? 參見: http://blogs.msdn.com/b/seema/archive/2006/09/18/761314.aspx http://blogs.msdn.com/b/seema/archive/2007/07/ 02/hw-acceleration-of-layered-windows-good-news.aspx – c0d1ng 2012-01-11 14:08:50

+0

也許玩着一些註冊表設置: http://msdn.microsoft.com/en-us/library/aa970912.aspx – c0d1ng 2012-01-11 14:12:24

1

值得考慮的比較時,開發者和用戶機之間的性能是它需要加載WPF程序集的時間。

在開發機器上,您可能已經運行了Visual Studio,或者之前運行過其他WPF應用程序,並且程序集應該在您運行應用程序時加載完畢。

在用戶機器上,可能剛剛重新啓動,程序啓動時將加載程序集,從而使啓動速度顯着變慢。根據應用程序的設置方式,當第一次使用各種功能/頁面時,可能會有其他程序集加載。

我發現EQUATEC profiler在調試這些性能問題時很有用。在構建項目之前將應用程序選項中的配置文件更改爲「完整常規信息」將分解到綁定級別。

+1

我不認爲這是關於啓動時間和預加載的程序集。這是關於應用程序生命週期的長期運行。我已經在http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/improving-wpf-applications-startup-time.aspx – Nick 2012-01-13 09:26:14

+0

上調查了各種與啓動相關的問題。此外,我已經運行Procmon與應用程序一起,並注意到在正常操作期間沒有文件加載(而UI則滯後)。無論如何,我肯定會給EQUATEC分析器一個提示! – Nick 2012-01-13 09:27:14

+0

感謝您的鏈接,我在那裏想了解很多內容(例如「將強名稱組合放在GAC中」以加快啓動速度) – Skrealin 2012-01-13 10:10:09