【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

ubuntu使用apt-get安装docker

忙着长大#

Ubuntu20.04

如何用crontab实现Python定时任务

芥末拌个饭吧

后端 python 3.5+ 10月月更

在线问题反馈模块实战(十三)​:实现多参数分页查询列表

bug菌

springboot 项目开发 10月月更

资源管理系统Apache Mesos

穿过生命散发芬芳

10月月更 Mesos

谈谈曾经做的一个测试报告平台(1)

MegaQi

Python 测试平台 10月月更

SAP CDS entity 中使用 @readonly 进行访问控制

Jerry Wang

CDS SAP abap 10月月更

Jenkins把GitHub项目做成Docker镜像

程序员欣宸

Docker jenkins 10月月更

数据结构-栈、队列、堆(java)

Studying_swz

数据结构 10月月更

JS逆向笔记

渔戈

JavaScript 逆向分析 10月月更

python有哪些格式化输出的方法

芥末拌个饭吧

后端 python 3.5+ 10月月更

Linux系统-基础IO

可口也可樂

Linux 10月月更 基础IO

docker数据卷使用

忙着长大#

,docker

【kafka运维】TopicCommand运维脚本(1)

石臻臻的杂货铺

kafka 运维 10月月更

Spring Boot概述(二)

Studying_swz

springboot 10月月更

git fetch&pull讲解 | Git

Appleex

git

“程”风破浪的开发者 | 关于web3.0远离银手镯比什么都重要!

王中阳Go

区块链 NFT Web3.0 10月月更 “程”风破浪的开发者

在线问题反馈模块实战(十四):实现在线答疑功能

bug菌

springboot 项目开发 10月月更

在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能

bug菌

springboot 项目开发 10月月更

Web3.0杂谈-#008(55/100)

hackstoic

Web3.0

【kafka运维】ConfigCommand运维脚本

石臻臻的杂货铺

kafka 运维 kafka运维 10月月更

Linux项目实训一

渔戈

Linux Ubuntu系统环境 10月月更

Vue3:认识侦听器watch🔥

渔戈

Vue 前端 10月月更

HashMap 源码分析(五)

知识浅谈

HashMap底层原理 10月月更

Python运算符有哪些你清楚吗

芥末拌个饭吧

后端 python 3.5+ 10月月更

架构实战营模块3-外包学生管理系统架构设计文档

冷夫冲

架构 架构设计 架构训练营

PyTorch (1) | PyTorch的安装与简介

timerring

PyTorch 10月月更

MyBatisPlus学习

Studying_swz

mybaitsplus 10月月更

极客时间运维进阶训练营第一周作业

老曹

云数据库助力电池云(一)

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

服务治理实施流程

阿泽🧸

10月月更 服务管理

数据湖(八):Iceberg数据存储格式

Lansonli

数据湖 10月月更

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