WPF 性能优化建议
本章讲述: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 性能优化建议相关推荐
- QML 性能优化建议(二)
前言 接前一篇文章,QML 性能优化建议(一),这里接着来介绍性能优化建议的第二部分:通用接口元素,在这里会介绍一些常见的元素,如:图片.布局之类的写法. 通用接口元素 图片 图片是任何用户界面的重要 ...
- Windows Phone性能优化建议
Windows Phone性能优化建议 原文:Windows Phone性能优化建议 使用background thread解码图片 在Windows Phone中支持的图片格式有jpg和png,微软 ...
- 笔记45 | 代码性能优化建议[转]
地址 笔记45 | 代码性能优化建议[转] 目录 前言 避免创建不必要的对象 选择Static而不是Virtual 常量声明为Static Final 避免内部的Getters/Setters 使用增 ...
- oracle 优化建议,oracle 性能优化建议小结
原则一:注意WHERE子句中的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子 ...
- 雅虎35条性能优化建议
雅虎35条性能优化建议分7类,共35条: [内容]尽量减少HTTP请求数 [服务器]使用CDN(Content Delivery Network) [服务器]添上Expires或者Cache-Cont ...
- 闲话WPF之二六(WPF性能优化点)
在建立漂亮UI的同时,我们还需要关注应用程序的性能,WPF尤其如此.下面从MS的文档中总结出了一些有用的性能优化点.在实际编写的过程中,可以参考.这个Post非完全原创,是根据一些文档总结出来的. 1 ...
- WPF 性能优化-高刷新绘图
背景介绍 笔者之前接到一个需求,需要在WPF上实时显示病人实时的生理信号(心电图等).团队开发,需求很快做完了(Unit test 效果图如下) 但是后来发布到产品上发现,资源占用比本机的要大.本地监 ...
- WebApp前端页面性能优化建议
字体设置 使用无衬线字体 body {font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif; } iOS 4. ...
- 移动游戏性能优化建议与字体剥离精简工具
/ 在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件 和 FontPruner 字体精简工具.他们各 ...
最新文章
- EF-Entity Framework 相关技术点收集贴
- 90 后利用平台漏洞薅羊毛,获利 45 万被抓捕!网友们却争论不休……
- git push origin master和git push有什么区别?
- [bzoj1187][HNOI2007]神奇游乐园
- Weblogic EJB 学习笔记(3)精
- python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...
- received packet with own address as source address
- Java 复制PDF文档
- 计算机里怎么添加桌面,电脑上怎么把我的电脑添加到桌面上
- 批量微信号码过滤程序
- Longitudinal Statistics 纵向统计分析
- 随机生成中文名字的工具类
- 积米:化妆找吉米,逛街找积米
- jQuery 引入和使用
- 美国知名泄密网站维基揭秘网屡建奇功
- 监听手机接收短信——模拟获取短信的验证码
- 牛客练习赛31 C 无畏死灵术士莉莲娜与锁链面纱(dfs + 期望dp)
- 错误状态0xc00002e1解决方法
- 冰封王座 英雄被动技能评估
- PDA上面安装.NET Compact Framework 3.5