這篇博客將介紹一些提高WPF程序的建議(水平有限,如果建議有誤,請指正。)
1. 加快WPF程序的啟動速度:
(1).減少需要顯示的元素數量,去除不需要或者冗余的XAML元素代碼.
(2).使用UI虛擬化,只顯示當前需要顯示的元素.
(3).不要把不要顯示的自定義控件隱藏在主界面中,雖然它們不會顯示出來,但是程序啟動時還是會去計算自定義控件所需的空間和位置.
2. 耗時操作放在放在非UI線程上處理,保持UI的順暢。處理完成后如果需要在UI上展示,調用Dispatcher.BeginInoke()方法。更多內容參考WPF QuickStart系列之線程模型(Thread Model);
3. 關於Data Binding,根據實際情況對Binding指定不同的Mode,性能OneWay優於TwoWay。另外修正掉系統中Binding錯誤,可以在Visual Studio的輸出日志中查找System.Windows.Data Error;
4. Resources: 系統資源,通常情況下我們會把樣式資源都統一到App.xaml中,這是很好的,便於資源的管理。不過盡量把多次重復用到的資源放到App.xaml中。例如某些頁面的資源只會在當前頁面中使用到,那么可以把資源定義在當前頁面; 如非必要,不要使用DynaicResource,使用StaticResource即可;
5. 對Item類型控件重寫時,使用VirtualizingStackPanel作為ItemPanel,這樣列表資源可以只渲染當前需要的內容。不過如果設置CanContextScrol="True"會阻止虛擬化,另外使用VirtualizingStackPanel時,可以設置VirtualizingStackPanel.VirtualizationMode="Recycling", 這樣已經顯示過的列表不會被重復創建和釋放掉。
6. 盡量少的使用Animation,尤其在程序啟動時,Animation渲染時會占用一些CPU資源。
大概就這些。另外遇到性能問題時,可以使用一些工具來分析,VS 2015的性能分析工具就很不錯,可以看到可視化樹的元素和內存占用情況。
感謝您的閱讀。
