大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

避开使用 XAML 的性能陷阱

  • 2012-02-28
  • 本文字数:652 字

    阅读完需:约 2 分钟

虽然 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 上的以下资料:

查看英文原文: http://www.infoq.com/news/2012/02/performance-xaml

2012-02-28 08:392149
用户头像

发布了 125 篇内容, 共 43.7 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

【编程实践】一步步带你从二叉树到实现哈夫曼编码

迷彩

算法 二叉树 9月月更 哈夫曼编码 哈夫曼树

2022-09-10:以下go语言代码输出什么?A:编译错误;B:49.0;C:49。 package main import ( “fmt“ ) func main() { ch

福大大架构师每日一题

golang 福大大 选择题

计算机网络——OSI参考模型

StackOverflow

编程 计算机网络 9月月更

IntelliJ IDEA远程调试Elasticsearch6.1.2

程序员欣宸

elasticsearch 9月月更

创立一年就估值5亿美金,这个项目是怎么做到的?

One Block Community

区块链 创业 融资 defi

图解Kafka的服务端的网络通信模型

石臻臻的杂货铺

kafka Kafka实战 9月月更

融云 Flutter SDK,跨平台开发的真香之选

融云 RongCloud

flutter 跨平台开发 SDK 教程

HTML标准解读第一章:HTML、XML、XHTML、SGML究竟有什么区别?

水鱼兄

html 前端 HTML标准

【JavaWeb】Servlet系列——session会话机制

胖虎不秃头

Web java; 9月月更

Web3.0 会长什么样?

掘金安东尼

前端 Web3.0 9月月更

【云原生 | 从零开始学Docker】二、Docker的常用指令学习以及使用

泡泡

Docker 云计算 云原生 9月月更

【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)

Fire_Shield

计算机视觉 9月月更 EasyX

LeetCode-1. 两数之和(java)

bug菌

9月日更 Leet Code 9月月更

C++ 学习 ------cmath 头文件的源码学习 03

桑榆

c++ 源码阅读 9月月更

力扣260 - 只出现一次的数字||| 【哈希映射、异或位运算+分治思想】

Fire_Shield

位运算 哈希表 9月月更

如何用Python代码绘制赏月美景?

芯动大师

中秋节

【JavaWeb】JSP系列——关于JSP、JSP的基础语法、利用Servlet+JSP改造项目、JSP指令、JSP九大内置对象

胖虎不秃头

Web java; 9月月更

高性能使用索引

急需上岸的小谢

9月月更

【C语言】字符函数&字符串函数&内存函数(上)[进阶篇_复习专用]

Dream-Y.ocean

c c++ 9月月更

值得收藏|三种经典的指标监控模型

穿过生命散发芬芳

9月月更 监控指标

架构师的十八般武艺:高并发架构

agnostic

高并发

FreeRTOS记录(五、FreeRTOS任务通知)

矜辰所致

FreeRTOS 9月月更 任务通知

InnoSetup制作补丁包替换文件操作

中国好公民st

c++ qt 9月月更

【JavaWeb】Servlet系列——Cookie机制、乱码问题总结

胖虎不秃头

Web java; 9月月更

【C语言深度剖析】深入理解C语言中函数的递归算法

Albert Edison

递归 C语言 函数 9月月更

LeetCode-861. 翻转矩阵后的得分(Java)

bug菌

9月日更 9月月更

跟我以前学mybatis

楠羽

mybatis 笔记 9月月更

哪些应用适合Docker化改造

阿泽🧸

Docker 9月月更

避开使用XAML的性能陷阱_语言 & 开发_Roopesh Shenoy_InfoQ精选文章