写点什么

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

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

关注

评论

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

50行代码串行Promise,koa洋葱模型原来是这么实现?

若川

JavaScript 前端 Node Jest koa2

怎样能低成本构建一个电商平台

Geek_99967b

小程序 电商

设计电商秒杀系统

小虾米

「架构实战营」

为什么 Vue2 this 能够直接获取到 data 和 methods,源码揭秘

若川

JavaScript Vue 前端 前端开发 源码解析

不得利用算法从事垄断行为:防范利用算法和大数据进行杀熟

石头IT视角

云厂商为什么都在冲这个KPI?

脑极体

面试官问:能否模拟实现JS的new操作符

若川

JavaScript 前端 前端开发

一种低成本增长私域流量,且维护简单的方法

Geek_99967b

小程序 电商

Java Core「18」JCF 及常见问题

Samson

学习笔记 Java core 6月月更

去哪儿网(Qunar) DevOps 实践分享

laofo

DevOps cicd 研发效能 持续交付 工程效率

声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

RTE开发者社区

人工智能 音视频

面对 this 指向丢失,尤雨溪在 Vuex 源码中是怎么处理的

若川

JavaScript Vue 前端 前端开发 vuex

模块化开发

Jason199

js 模块化 6月月更

Flutter SliverAppBar全解析,你要的效果都在这了!

yechaoa

flutter android 6月月更 SliverAppBar

【使用Python实现算法】02 原生类型与内置函数

★忆先★

Python 算法题

从小到大为何一谈学习就愁眉苦脸

宇宙之一粟

学习 6月月更

Ubuntu下安装OpenJDK10

程序员欣宸

Java Openjdk 6月月更

毕业总结

小虾米

「架构实战营」

云原生运维文章计划

boaker

运维 云原生

攻防演练中蓝队针对攻击方式复盘总结

穿过生命散发芬芳

6月月更 攻防演练

Java中数组参考指南

okokabcd

Java’

深入理解 Jetpack Compose SlotTable 系统

fundroid

android Compose android jetpack SlotTable gap buffer

面试官问:JS的继承

若川

JavaScript 前端 前端开发

面试官问:JS的this指向

若川

JavaScript 前端 前端开发

JavaScript 对象所有API解析

若川

JavaScript 前端 前端开发

COSCon'22 讲师征集令

开源社

开源

Prometheus 2.35.0 新特性

耳东@Erdong

release Prometheus 6月月更

【使用Python实现算法】01 语言特性

★忆先★

Python 算法 算法题

要搞清楚什么是同步,异步,串行,并行,并发,进程,线程,协程

乌龟哥哥

6月月更

Scala 基础 (三):运算符和流程控制

百思不得小赵

scala 大数据 6月月更

如何系统学习LabVIEW?

不脱发的程序猿

​LabVIEW LabVIEW机器视觉 ​LabVIEW工业控制 ​LabVIEW单片机 ​LabVIEW开发技巧

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