提高WPF程序性能的几条建议

这篇博客将介绍一些提高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的性能分析工具就很不错,可以看到可视化树的元素和内存占用情况。

感谢您的阅读。

posted @ 2015-12-19 22:27  Yang-Fei  阅读(3271)  评论(2编辑  收藏  举报