BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

避开使用XAML的性能陷阱

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 曹如进 关注 0 他的粉丝 发布于 2012年2月29日. 估计阅读时间: 2 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

虽然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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT