写点什么

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

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

关注

评论

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

如何做好需求管理?华为云需求管理利器CodeArts Req解读

云计算 产品经理 需求管理 华为云

Spring Validated 校验框架,让你的项目更简洁,提升开发效率

Java spring Validated

CFS第十二届财经峰会7月举行, 候选品牌:行云管家

行云管家

云计算 商业 财经峰会

羊了个羊游戏|链游dapp系统开发方案

Congge420

5人5月用容器技术保卫蓝天

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

浅析 Redis 中 String 数据类型及其底层编码

redis 数据结构 string

前端微服务无界实践 | 京东云技术团队

京东科技开发者

微服务 前端 企业号 5 月 PK 榜 无界

1个Java程序员需要具备什么样的素质和能力才可以称得上高级工程师?

Java永远的神

程序员 后端 架构师 java面试 Java性能优化

什么是数字藏品|数字藏品系统开发源码?

Congge420

CMake常用命令大全:提高项目构建效率

小万哥

程序员 面试 后端 C/C++ cmake

一名开发者眼中的 TiDB 与 MySQL 的选择丨TiDB Community

PingCAP

MySQL 数据库 TiDB

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

Java 架构 微服务 设计模式

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

阿里云大数据AI技术

人工智能 模型 Stable Diffusion 企业号 5 月 PK 榜

首个机器学习实时特征平台测试基准论文被 VLDB 2023 录取

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Elasticsearch之join关联查询及使用场景 | 京东云技术团队

京东科技开发者

数据库 elasticsearch sql join 企业号 5 月 PK 榜

3种分页列表缓存方式,速收藏~~

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

为什么说财务共享是财务数智化转型的基石?

用友BIP

财务共享

Nautilus Chain开启全球行,普及Layer3概念加速其采用

鳄鱼视界

CST 电磁仿真计算时,为什么要关闭超线程?【操作教程】

思茂信息

cst cst使用教程 cst电磁仿真 cst仿真软件

Gamefi很有潜力?分析链游gamefi系统开发源码!

Congge420

成功加冕!用友大易获评2023最佳招聘管理软件供应商

用友BIP

招聘

万字长文详述ClickHouse在京喜达实时数据的探索与实践 | 京东云技术团队

京东科技开发者

数据库 flink Clickhouse 企业号 5 月 PK 榜

文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)

汀丶人工智能

nlp 知识图谱 信息抽取 命名实体识别 pyltp

选择小程序第三方开发框架,你需要知道这些

没有用户名丶

Iframe在Vue中的状态保持技术 | 京东云技术团队

京东科技开发者

html Vue iframe 跨域 iframe 企业号 5 月 PK 榜

公网对讲SDK——对讲应用场景

anyRTC开发者

音视频 视频会议 指挥调度 快对讲 公网对讲

深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解

汀丶人工智能

人工智能 深度学习 nlp 预训练模型 Transformer

TDengine 成功“晋级” Percona Live 2023 银牌赞助商,开发者驻足关注

爱倒腾的程序员

顺丰科技携手飞桨自研“智能外呼机器人”,为客户打造优质服务体验

飞桨PaddlePaddle

nlp 语音识别 百度飞桨

开源堡垒机和免费商业堡垒机哪个用的更香?

行云管家

开源 网络安全 免费堡垒机

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