写点什么

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

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

关注

评论

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

MatrixOne实战系列回顾 | 导入导出项目场景实践

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

关联规则挖掘:Apriori算法的深度探讨

不在线第一只蜗牛

Python 大数据 算法

模块一作业

闻明杨

架构实战营

Wireshark的数据包它来啦!

小魏写代码

将 Spring 微服务与 BI 工具集成:最佳实践

互联网工科生

spring 微服务 BI 分析工具

企业软件定制开发的重点是什么?|app小程序网站建设

Geek_16d138

APP开发 软件定制

AI,正在「整顿」企业面试

用友BIP

NLP领域预训练模型的发展方向

百度开发者中心

人工智能 nlp 大模型

软件测试/人工智能丨人工智能取代软件测试团队

测试人

人工智能 软件测试

百度搜索万亿规模特征计算系统实践

百度Geek说

Python 数据库 百度搜索 企业号11月PK榜

大模型训练全新升级,训练步骤大幅缩短

百度开发者中心

人工智能 深度学习 大模型

软件测试/人工智能丨视觉与图像识别在自动化测试领域的应用

测试人

人工智能 软件测试

Tipard FixMP4 for Mac 视频修复工具

彩云

视频修复 Tipard FixMP4

O-Star|再相识

MatrixOrigin

云原生数据库 MatrixOrigin MatrixOne 超融合数据库 HTAP数据库

手把手入门MO | 如何使用SeaTunnel将数据写入MatrixOne

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

加速CI构建,实现高效流水线——CloudBees CI发布工作区缓存功能

龙智—DevSecOps解决方案

ci

什么是Mock?为什么要使用Mock呢?

我爱娃哈哈😍

Mock Mock 服务 mock设计

报名仅剩一周!课程直播和1V1指导助力文心一言插件开发赛事冲榜

飞桨PaddlePaddle

插件开发 文心一言 开发者插件

科创人·蓝凌董事长杨健伟:夯实“四梁八柱”,让数字化“城中村上建高楼”

科创人

数字化转型 企业家精神

专业raw图像处理工具:DxO PhotoLab 7中文版

彩云

图像处理工具 DxO PhotoLab 7

软件测试/人工智能丨视觉与图像识别在自动化测试领域的应用

测试人

人工智能 软件测试

深入探索 perf CPU Profiling 实现原理

mazhen

Linux Performance perf kernel

Java多线程系列3:Java线程的一生

BigBang!

Java多线程

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