写点什么

避开使用 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:392161
用户头像

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

关注

评论

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

一文搞懂 CountDownLatch 用法和源码!

苹果看辽宁体育

Java 源码 并发

DeFi平台DAPP软件系统开发

系统开发

Linux 如何实现定时调度任务

Near

Linux Timer 定时调度

第九周总结

小兵

围观|第一代云原生企业米哈游如何让想象发生?

阿里巴巴云原生

阿里云 最佳实践 运维 云原生 游戏开发

快手基于 Apache Flink 的优化实践

Apache Flink

flink

优化PostgreSQL Autovacuum

PostgreSQLChina

数据库 postgresql 开源 优化

安防小区管控系统建设,智慧社区智能化集成方案

t13823115967

智慧平安社区平台建设

工作3年,看啥资料能月薪30K?

小傅哥

Java 面试 小傅哥 七日更 技术成长

第九周-作业一

ray-arch

测开之函数进阶· 第1篇《递归函数》

清菡软件测试

测试开发

ETHERZ流动性挖矿系统软件APP开发

系统开发

vivo 微服务 API 网关架构实践

vivo互联网技术

微服务 API网关 Zuul2

公安大数据:警务大数据分析系统解决方案

t13823115967

智慧公安

详解Spring5+SpringMVC5+MyBatis3.X,同时整合Redis缓存+ActiveMQ+项目等

Java架构追梦

Java spring 架构 mybatis springmvc

MySQL修改账号密码方法大全

Simon

MySQL 七日更

蚂蚁集团下架互联网存款产品:互联网金融是天使还是魔鬼

石头IT视角

Java并发编程:AQS的原子性如何保证

李尚智

Java java 并发

4. 上新了Spring,全新一代类型转换机制

YourBatman

Spring Framework 类型转换 Converter

数据结构与算法经典问题解析-Java语言描述

田维常

数据结构

为什么你成为不了团队核心成员

数据社

团队 七日更

UBI波场挖矿系统软件APP开发

系统开发

点个外卖,我把「软中断」搞懂了

小林coding

Linux 操作系统

盘点2020 | 干饭人 cxuan 活下来了

苹果看辽宁体育

学习 总结 盘点2020

JVM 垃圾回收原理

梧桐

Synchronized用法原理和锁优化升级过程(面试)

叫练

synchronized 轻量级锁 偏向锁 多线程与高并发 同步

Code Shared & Review(20201214-20201220)

刘璐

LeetCode题解:92. 反转链表 II,递归,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

阿里 10 年:一个普通技术人的成长之路

阿里巴巴云原生

阿里云 云原生 技术人 自我思考 职场成长

业务重要?还是技术重要?

数据社

思考 团队 七日更

11 组关系带你看清 JVM 全貌

田维常

JVM

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