写点什么

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

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

关注

评论

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

使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

京东科技开发者

喜讯!无垠智能模糊测试系统入选“2023软件供应链优秀成果”

云起无垠

如何在苹果手机上进行文件管理

Meta Llama大模型:引领人工智能创新

百度开发者中心

人工智能 深度学习 大模型

如何提升时序数据多表低频场景的写入性能?一文详解

TDengine

tdengine 时序数据库

如何写好大模型提示词?来自大赛冠军的经验分享(基础篇)

Baihai IDP

人工智能 AI LLM Prompt Prompt Engineering

即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]

JackJiang

网络编程 即时通讯 IM

活了三十多年终于知道单模光纤与多模光纤

小齐写代码

Video-LLaMA:为AI大模型注入视听觉

百度开发者中心

人工智能 大模型

深入了解LLaMA大模型

百度开发者中心

深度学习 nlp 大模型

Code Llama:基于 Llama 2 的 AI 代码生成大模型

百度开发者中心

人工智能 大模型 代码生成

为什么要将应用微服务化?

伤感汤姆布利柏

程序员 微服务 低代码 架构师 JNPF

深入理解WebSocket ACK:关键技术提升数据传输的可靠性

Apifox

前端 后端 websocket 协议 WebSocket ACK

一文带你揭秘淘宝终端技术

阿里技术

基础设施 招聘 淘宝 终端技术

得物云原生容器技术探索与落地实践

得物技术

云原生 技术分享

【第七在线】服装企业对于智能商品计划系统的误区有哪些?

第七在线

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