写点什么

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

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

关注

评论

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

针对各种指标数据如何选择合适的算法?

云智慧AIOps社区

技术 算法 数据 智能运维 指标

深入剖析 | XLSX海量数据复杂填充解决方案

九叔(高翔龙)

中间件 EasyExcel Apache POI java核心

枚举在 Golang 中的实现

baiyutang

Go 语言 9月日更

【LeetCode】寻找峰值Java题解

Albert

算法 LeetCode 9月日更

DBA:介里有你没有用过的“CHUAN”新社区版本Redis6.0

华为云开发者联盟

redis 开源 多线程 Redis 6.0 华为云DCS

在线JSON转sarcastic工具

入门小站

工具

17. 关于超人工智能来临,霍金的忧虑

Databri_AI

人工智能

聊一聊芯片上电复位和掉电检测

不脱发的程序猿

嵌入式 硬件开发 芯片上电 上电复位 掉电检测

【Flutter 专题】46 图解新的状态管理 Provider (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

华为云开发者联盟

数据库 算法 索引 GaussDB(for MySQL) MySQL索引

图计算的应用

6979阿强

MySQL事务学习笔记

风翱

MySQL 9月日更

产品设计的几个原则

石云升

产品思维 产品思考 9月日更

图遍历算法

6979阿强

图遍历 GraphScope

雪花算法,什么情况下发生 ID 冲突?

马丁玩编程

Java lua redis 雪花算法

手撸二叉树之翻转二叉树

HelloWorld杰少

9月日更

怎样才能写好前端页面,css书写顺序和布局真的有那么重要吗

你好bk

CSS html 大前端 结构

命令行如何执行jar包里面的方法

FunTester

性能测试 反射 接口测试 测试框架 FunTester

Supervisor 基础配置

耳东@Erdong

Supervisor 9月日更

Sentinel 常用流控算法

Z

sentinel 流控算法 服务监控 服务降级 流控

网络攻防学习笔记 Day136

穿过生命散发芬芳

vpn 9月日更 恶意代码

架构实战营模块三作业

michael

#架构实战营

“妈我不想去上课!”“不行你是老师!”

梦想橡皮擦

9月日更

乘着汽车智能化的浪潮,“汽车人”的职业方向选择(二)

SOA开发者

程序员 软件 汽车 职业发展

【Vuex 源码学习】第三篇 - Vuex 中 State 状态的实现

Brave

源码 vuex 9月日更

JavaScript 进阶(下)

Augus

JavaScript 9月日更

linux之iconv命令

入门小站

Linux

还重构?就你那代码只能铲了重写!

小傅哥

Java 小傅哥 代码优化 代码重构 开发标准

Python——绑定与方法调用

在即

9月日更

WEB全屏API简介及示例

devpoint

web api 9月日更

linux系列之:告诉他,他根本不懂kill

程序那些事

Linux 命令 程序那些事 kill

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