当前位置:  开发笔记 > 编程语言 > 正文

INotifyPropertyChanged与DependencyProperty

如何解决《INotifyPropertyChanged与DependencyProperty》经验,为你挑选了3个好方法。

我需要观察属性的变化.哪种方法在性能和内存使用方面更好:实现INotifyPropertyChanged或使用DependencyProperty

注意:是的,我在ViewModel中已经阅读了另一个问题:INotifyPropertyChanged与DependencyProperty.



1> Rob McCready..:

内存使用:INotifyPropertyChanged是一个接口,因此接近零内存开销."接近于零"因为我假设您将编写一个OnPropertyChanged方法,并且可能在其他类中编写一些事件处理程序(除非您真的只是在谈论绑定到WPF),因此会有轻微的代码开销.

性能:DependancyProperties有很多内容.除非你编写了最有效的OnPropertyChanged方法,否则我会打赌INotifyPropertyChanged也将成为优胜者.

除非你有一个明确的理由想要/需要DP提供的行为,否则我会选择INotifyPropertyChanged.

更新

正如评论所提到的那样,对于DP来说,绑定性能要快一些(由于直接属性的查找/连接所需的反射量,快15-20%,但仍然只有不到50毫秒的1000个绑定).这在技术上与更新数据绑定UI元素的性能不同,这是我的评论所面向的.但这并不意味着我的赌注也是正确的.所以一些例子和很多.NET Reflector挖掘机后来看起来......没有定论.两条路径都做了大量的工作,我无法得到任何示例来显示更新性能的明确差异.

我仍然坚持使用INotifyPropertyChanged,除非我特别需要DP,但这至少是一个有趣的练习,可以更多地探讨WPF核心.:)


你的赌注似乎是错误的.请参阅Orion的答案和MSDN文档.DP速度更快.

2> 小智..:

没关系,我刚刚在下面的问题中找到了我想要的答案.

为了您的方便,我会将"LBugnion"的答案重新发布(所以所有功劳都归他所有):


实现INotifyPropertyChanged与DependencyObjects相比有许多优点(我将简化此DO以使其更容易)并使用DependencyProperties(DP):

这更轻巧

允许您更自由地建模对象

可以轻松序列化

您可以在需要时引发事件,这在某些情况下很有用,例如,当您只想在一个UI操作中捆绑多个更改时,或者即使数据没有更改也需要引发事件(到强制重绘...)

另一方面,在WPF中继承DO具有以下优点:

更容易实施,尤其适合初学者.

您可以免费获得回调机制(几乎),允许您在属性值更改时收到通知

您将获得强制机制,允许您定义属性的最大值,最小值和现值的规则.

还有其他一些考虑因素,但这些是主要考虑因素.

我认为普遍的共识是DP很适合控件(你甚至可以在Silverlight中使用自定义DP实现CustomControl),但是对于数据对象,你应该实现INotifyPropertyChanged.

HTH,Laurent



3> 小智..:

正如MSDN所说,使用INotifyPropertyChanged,WPF绑定到DependencyProperties比使用自定义CLR对象更快.

请参阅http://msdn.microsoft.com/en-us/library/bb613546.aspx

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有