避开使用XAML的性能陷阱
虽然DependencyProperty和DependencyObject是实现大部分XAML特性的基础,但是它们也会带来一些性能开销。MSDN上的一篇文章《XAML平台上的C#优化》(Optimizing C# for XAML Platforms)详细讨论了该问题,并给出了一些解决方案以尽量减少由此造成的性能影响。
访问和设置DependencyProperty值的响应时间要比访问CLR属性的时间长上几个数量级。这在低性能硬件(如Windows 7 Phone)以及紧密循环或复杂LINQ语句中尤为明显。文章中提出了一些解决方案,包括:
- 能用CLR属性完成工作就不要用Dependency属性;
- 缓存DependencyProperty以避免反复进行get操作;在set操作前先行比较新值与当前值(这是因为重复设置属性值与设置新值的代价一样高)。此类优化可以在含有属性的类中完成,或者在代码调用前(例如在遍历循环前)完成;
- 考虑LINQ查询的复杂度(如查询所需要遍历全部条目的总次数)之后,再决定是使用它还是回归到编写循环;
- 避免使用延迟初始化(lazy initialization),如果它会带来更多的工作量(如在循环内部时);
- 如果在ItemControl内部使用Panel来实现多条目,请使用支持虚拟化的panel,例如VirtualizationStackPanel。
使用XAML大展身手的两处地方——一处是在WPF客户端上实现富客户端体验/媒体;另一处是在硬件资源受限的Windows Phone平台上。由于两者都需要良好的性能,因此了解这些内在原理以编写出高性能代码是值得的。
关于特定平台上的性能注意事项,请查阅MSDN上的以下资料:
避开使用XAML的性能陷阱相关推荐
- 贯穿应用开发始终的八大性能陷阱
数据库访问低效.框架配置错误.内存使用过度.网页臃肿,以及不遵循常见Web性能最佳实践都是应用开发中常见的.影响应用性能的主要陷阱 .技术性能公司Computeware从实际案例总结了贯穿应用始终的八 ...
- memset性能陷阱
性能杀手:"潜伏"的memset [memset性能陷进] memset是大家常用的函数,而且一般的编程书籍都会谆谆告诫大家:申请内存后要初始化,防止使用未经初始化的内存导致不可预 ...
- java 排序性能_Java8排序–性能陷阱
java 排序性能 Java 8带来了lambda的所有优点,使我们能够使用声明式样式进行编程. 但这真的免费吗? 我们是否应该担心必须为新的编程功能付出的代价? 这是一个我们可能要担心的例子. 考虑 ...
- Java8排序–性能陷阱
Java 8带来了lambda的所有优点,使我们能够使用声明式样式进行编程. 但这真的免费吗? 我们是否应该担心必须为新的编程功能付出的代价? 这是一个我们可能要担心的例子. 考虑对这个简单类的实例进 ...
- 【开发者成长】Vue.js 中有哪些性能陷阱
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 我内心深处对游戏的热爱,让我一直渴望能自己制作一些电子游戏.几个月前我开始将这种梦想变为现实,并第 ...
- 做抖音运营,一定要避开的3类数据陷阱
随着短视频的日益流行,越来越多的内容工作者投身这个行业,也有越来越多的机构在发布研究报告和数据,越来越多的培训班用数据"武装"自己.但很多时候,那些抖音推广展示的数据或是相关的报告 ...
- 【2017年第2期】开发商业智能应用 小心大数据“陷阱”
黄锦辉 香港中文大学工程学院,香港 999077 摘要:大数据的应用和研究是信息爆炸时代的热点话题.就如何更智能地发现大数据中的有用信息展开讨论,探讨了大数据中的"陷阱"和其引发的 ...
- Apache Spark Jobs 性能调优
当你开始编写 Apache Spark 代码或者浏览公开的 API 的时候,你会遇到各种各样术语,比如transformation,action,RDD(resilient distributed d ...
- iOS核心动画高级技术(十二) 性能调优
Code should run as fast as necessary, but no faster. 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Anima ...
最新文章
- ES6中的Promise详解
- 他是第一个到达学校的人英语_日本留学:不需要英语成绩的大学盘点·私立学部篇(第三弹)...
- 简书上的大牛总结的 ServerSocket Accept() 的确是阻塞方法 与猜想一致 一些理解 转载如下
- 别在用U盘拷贝源码带回家了,有童鞋被判刑啦!
- 中国超导产业投资风险及应用前景调研报告2021版
- ABAP Update Navigation Index
- 阿里云存储OSS中设置上传文件content type
- 神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...
- 使用python3连接hiveserver2的方法
- lincode 题目记录6
- layui select change事件_一道2020年全国生物学联赛试题背后的“眼齿鸟事件”
- Android入门(四)UI-创建自定义控件
- paip.erlang环境搭建和脚本式escript运行halo world 在windows下attilax总结
- spss中有关独立样本T检验的详细介绍(包含操作过程和结果分析)
- linux日志过大怎么查看,Linux查看日志常用命令
- 如何批量将图片转换为 PDF 文档
- Android高仿淘宝订单列表效果,列表中嵌套列表
- 【SQL文档整理系列1】MySQL创建procedure(可以用来造测试数据)
- MD5大小写,32,16
- 怎样理解心藏神,肝藏魂,脾藏意,肺藏魄,肾藏精志?
热门文章
- php设置外键约束,关于php:禁用教义外键约束
- 在服务器客户端怎么启用协议,如何启用客户机的WINS功能
- Python程序:输出斐波那契数列
- 【BZOJ3295】动态逆序对,CDQ分治/BIT套权值线段树
- flask web开发是前端还是后端_Flask Web开发实战:入门、进阶与原理解析 PDF 全格式版...
- 左对齐杨辉三角python_python实现杨辉三角思路
- 【Level 08】U08 Positive Attitude L5 Satisfy your need to know
- 【英语学习】【English L06】U02 Food L1 Food on the menu
- 【英语学习】【WOTD】avuncular 释义/词源/示例
- python自动打开浏览器下载zip,并且提取内容写入excel