如果WPF應用程序的屏幕包含大量原始控件,則其渲染將變得緩慢。在這種情況下,除了增加更少的控件和使用更強大的視頻卡之外,還有哪些建議的方法可以提高WPF應用程序的響應速度?提高WPF UI渲染速度的方法
有沒有辦法以某種方式使用屏幕外緩衝或類似的東西?
如果WPF應用程序的屏幕包含大量原始控件,則其渲染將變得緩慢。在這種情況下,除了增加更少的控件和使用更強大的視頻卡之外,還有哪些建議的方法可以提高WPF應用程序的響應速度?提高WPF UI渲染速度的方法
有沒有辦法以某種方式使用屏幕外緩衝或類似的東西?
我們的團隊面臨着渲染性能。在我們的例子中,我們有大約400個運輸單元,我們應該爲每個單元提供很多細節(文本標籤,特殊標記,不同幾何形狀等)的圖表。
在我們的實現中,我們首先將每個圖表分成基元,並通過綁定組合整個單元的圖表。這是非常難過的經歷。 UI反應非常緩慢。
因此,我們決定創建一個每個單元的UI元素,並使用DrawingContext呈現圖表。雖然這在性能方面要好得多,但我們花了大約一個月時間來改善渲染。
一些建議:
RenderTools
和TextCache
。將每個單元的渲染過程地址分配給兩個類的共享實例,因此如果兩個圖表具有相同的文本,則只准備執行一次)Freezable
,如果您打算長期使用它。尤其是幾何形狀。複雜的解凍幾何執行HitTest非常緩慢。DrawingContext.DrawGlyphs
。當然,這種方式需要一些投資,這是枯燥乏味的工作,但結果是真棒。順便說一下:當我們打開WPF緩存選項(你可以在答案中找到鏈接),我們的應用程序掛起。
我意識到這篇文章有點舊,但我想知道你用什麼方法來緩存刷子,顏色和什麼。如果我知道如何做到這一點,我覺得我可以避免一些滯後。 – 2012-06-18 17:17:33
[Here](http://pastebin.com/v83XZLTc)我上傳了RenderTools對象的簡化版本。 [這裏](http://pastebin.com/e8VhuHez)就是使用示例。 如果你仍然有問題,隨時問。 – 2012-06-21 14:33:20
非常感謝。我會看看他們。 – 2012-06-21 17:47:44
,因爲有一年我已經受夠了一個高度定製的DataGrid相同的PERF的問題,我的結論是:
也基本上沒有什麼,你可以在你的身邊做 (不影響你 應用,即:具有較少的控制或 只使用默認樣式)
由延提到的鏈接是偉大的,但你的情況也沒用。
NVM提供的「優化WPF應用程序性能」鏈接在我的經驗中幾乎同樣沒用:它只是吸引常識,我相信你不會學到任何非凡的閱讀。 除了一件事情可能:我必須說這個鏈接教會我儘可能多地放入我的應用資源。因爲WPF不會重新資助你放入資源的任何東西,它只是反覆使用同一資源。因此,儘可能多的,你可以在那裏(樣式,畫筆,模板,字體...)
總而言之,根本沒有辦法讓WPF中的事情變得更快,只需通過檢查選項或關閉其他。你可以在不久的將來祈求MS重做他們的渲染層來優化它,同時,儘量減少你對效果和定製控制的需求......
你可以給一些數字嗎?每個窗口的控件數量等。 – NVM 2011-03-23 17:32:28
@NVM實際上,現在每個窗口大約有一千個自定義控件(自定義控件包含幾個邊框,文本塊並且具有幾十個依賴項屬性)。控件的數量可以增加。但已經這個數量需要一些不舒服的秒數來在初始渲染上可視化自己。另外,它放大時不提供很好的平滑滾動。 – rem 2011-03-23 17:53:54
我發現很難在用戶面前同時顯示具有一千個文本框的UI。無論如何,取決於如何安排一切,您可以使用內置虛擬化面板之一或編寫自己的自定義窗口,只創建可見的控件。這應該會顯着加快事態發展。 – NVM 2011-03-23 20:37:34