本章讲述:WPF 性能优化建议

20180930 WPF性能优化问题:运行软件发现CPU使用率很大(80%-95%),程序中含有委托,线程,定时器的处理,之前优化时,主要优化线程和定时器相关线程方面的处理,但是效果甚微;

无意间看到博客中说程序界面中使用了投影效果会造成CPU使用率高,就试着修改,没想到,软件运行稳定后CPU使用率下降到了30%左右。

现整理一下WPF性能优化建议:

1、尽量不使用DropShadowEffect投影效果,消耗资源很大;

2、在自定义控件,尽量不要在控件的ResourceDictionary定义资源,而应该放在Window或者Application级。因为放在控件中会使每个实例都保留一份资源的拷贝;

3、尽量多使用Canvas等简单的布局元素,少使用Grid或者StackPanel等复杂的,减小开销;

4、少用Margin Padding尤其避免嵌套使用;

5、尽量使用Static Resources不用DynamicResource;

6、计时尽量使用DispatcherTimer替代Timer;

7、自定义控件尽量从轻量级的控件继承;

8、需要绑定的属性设置为DependencyProperty的依赖项属性效率要高很多,不要自己写继承自INotifyPropertyChanged的属性:http://www.codeproject.com/Articles/62158/DependencyProperties-or-INotifyPropertyChanged

9、文字少的时候用TextBlock或者label,长的时候用FlowDocument;

10、绑定的字符串用Textblock;不用label;

11、如果正在绘制的内容需要频繁地重新绘制,考虑设置各Uelement对象的CacheMode="BitmapCache";

12、避免使用 Run 来设置文本属性:(MSDN)

   <TextBlock><Run FontWeight="Bold">Hello, world</Run></TextBlock><TextBlock FontWeight="Bold">Hello, world</TextBlock>

13、尽量不要过分依赖使用值转换器;尽量少使用第三方类库;尽量不要设置控件Opacity属性,而用Visibility

14、加快WPF程序的启动速度:

(1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码.

(2).使用UI虚拟化,只显示当前需要显示的元素.

(3).不要把不要显示的自定义控件隐藏在主界面中,虽然它们不会显示出来,但是程序启动时还是会去计算自定义控件所需的空间和位置.

15、 耗时操作放在放在非UI线程上处理,保持UI的顺畅。处理完成后如果需要在UI上展示,调用Dispatcher.BeginInoke()方法。更多内容参考WPF QuickStart系列之线程模型(Thread Model);

16、关于Data Binding,根据实际情况对Binding指定不同的Mode,性能OneWay优于TwoWay。另外修正掉系统中Binding错误,可以在Visual Studio的输出日志中查找System.Windows.Data Error;

17、Resources: 系统资源,通常情况下我们会把样式资源都统一到App.xaml中,这是很好的,便于资源的管理。不过尽量把多次重复用到的资源放到App.xaml中。例如某些页面的资源只会在当前页面中使用到,那么可以把资源定义在当前页面; 如非必要,不要使用DynaicResource,使用StaticResource即可;

18、对Item类型控件重写时,使用VirtualizingStackPanel作为ItemPanel,这样列表资源可以只渲染当前需要的内容。不过如果设置CanContextScrol="True"会阻止虚拟化,另外使用VirtualizingStackPanel时,可以设置VirtualizingStackPanel.VirtualizationMode="Recycling", 这样已经显示过的列表不会被重复创建和释放掉。

19、尽量少的使用Animation,尤其在程序启动时,Animation渲染时会占用一些CPU资源。

WPF 性能优化建议相关推荐

  1. QML 性能优化建议(二)

    前言 接前一篇文章,QML 性能优化建议(一),这里接着来介绍性能优化建议的第二部分:通用接口元素,在这里会介绍一些常见的元素,如:图片.布局之类的写法. 通用接口元素 图片 图片是任何用户界面的重要 ...

  2. Windows Phone性能优化建议

    Windows Phone性能优化建议 原文:Windows Phone性能优化建议 使用background thread解码图片 在Windows Phone中支持的图片格式有jpg和png,微软 ...

  3. 笔记45 | 代码性能优化建议[转]

    地址 笔记45 | 代码性能优化建议[转] 目录 前言 避免创建不必要的对象 选择Static而不是Virtual 常量声明为Static Final 避免内部的Getters/Setters 使用增 ...

  4. oracle 优化建议,oracle 性能优化建议小结

    原则一:注意WHERE子句中的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子 ...

  5. 雅虎35条性能优化建议

    雅虎35条性能优化建议分7类,共35条: [内容]尽量减少HTTP请求数 [服务器]使用CDN(Content Delivery Network) [服务器]添上Expires或者Cache-Cont ...

  6. 闲话WPF之二六(WPF性能优化点)

    在建立漂亮UI的同时,我们还需要关注应用程序的性能,WPF尤其如此.下面从MS的文档中总结出了一些有用的性能优化点.在实际编写的过程中,可以参考.这个Post非完全原创,是根据一些文档总结出来的. 1 ...

  7. WPF 性能优化-高刷新绘图

    背景介绍 笔者之前接到一个需求,需要在WPF上实时显示病人实时的生理信号(心电图等).团队开发,需求很快做完了(Unit test 效果图如下) 但是后来发布到产品上发现,资源占用比本机的要大.本地监 ...

  8. WebApp前端页面性能优化建议

    字体设置 使用无衬线字体 body {font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif; } iOS 4. ...

  9. 移动游戏性能优化建议与字体剥离精简工具

    / 在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件 和 FontPruner 字体精简工具.他们各 ...

最新文章

  1. EF-Entity Framework 相关技术点收集贴
  2. 90 后利用平台漏洞薅羊毛,获利 45 万被抓捕!网友们却争论不休……
  3. git push origin master和git push有什么区别?
  4. [bzoj1187][HNOI2007]神奇游乐园
  5. Weblogic EJB 学习笔记(3)精
  6. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...
  7. received packet with own address as source address
  8. Java 复制PDF文档
  9. 计算机里怎么添加桌面,电脑上怎么把我的电脑添加到桌面上
  10. 批量微信号码过滤程序
  11. Longitudinal Statistics 纵向统计分析
  12. 随机生成中文名字的工具类
  13. 积米:化妆找吉米,逛街找积米
  14. jQuery 引入和使用
  15. 美国知名泄密网站维基揭秘网屡建奇功
  16. 监听手机接收短信——模拟获取短信的验证码
  17. 牛客练习赛31 C 无畏死灵术士莉莲娜与锁链面纱(dfs + 期望dp)
  18. 错误状态0xc00002e1解决方法
  19. 冰封王座 英雄被动技能评估
  20. PDA上面安装.NET Compact Framework 3.5

热门文章

  1. php擂台赛,铁锈战争擂台赛 - 赛事直播 - 铁锈战争 - Rusted Warfare
  2. Mac电脑管理员登录密码破解方法
  3. webpack打包工具2
  4. 要泛流量还是精准流量?知识付费网课项目5招精准引流法
  5. 2023初级程序员-最新面试题八股文(超详细)
  6. 关于Win10外接显示屏显示自定义分辨率和显示异常的问题
  7. android assets 在哪里,轻读一下 Android 应用开发中的 assets 目录
  8. 光の行方 魔女猎人op
  9. 堰流实验报告思考题_流体实验报告 堰流流量系数测定实验
  10. MySql like模糊查询语句用法