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

感谢您的阅读。

最新文章

  1. Linux文件管理命令笔记
  2. Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段
  3. Linux解压命令大全
  4. Delete Node in a Linked List
  5. 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
  6. Java Concurrency - Callable & Future
  7. Python连接msyql、redis学习_Day12
  8. 解决SQLServer 2008 日志无法收缩,收缩后大小不改变
  9. Nginx配置同一个域名同时支持http与https两种方式访问
  10. 胜利大逃亡(续)(bfs+状态压缩)
  11. SSH框架之hibernate《四》
  12. .NET EF框架的安装、及三种开发模式
  13. Unity外包团队:关于手机unity游戏开发的技术选型
  14. Java并发编程-并发工具类及线程池
  15. Java基础学习-HelloWorld案例常见问题
  16. NodeJS入门教学
  17. WCF开发实战系列三:自运行WCF服务
  18. zTree入门实例(一眼就看会)
  19. Mybatis出现参数错误Parameter 'cateCode_search' not found. Available parameters are [3, 2, 1, 0, param1, param2, 5, param3, 4, param4, param5, param6]
  20. SOLR对多个(关联)表创建索引

热门文章

  1. Hadoop2.2.0环境下Sqoop1.99.3安装
  2. Java Statement和PreparedStatement性能测试(转)
  3. 深入浅出Java回调机制
  4. Walls and Gates
  5. C# 读写ini文件
  6. POJ 1426
  7. Nginx如何设置拒绝或允许指定ip访问
  8. js中修改标签的hidden属性
  9. ffmpeg-20160714-git-bin.7z
  10. openal-1.13 静态编译(mingw32)