c# - INotifyPropertyChanged 与 DependencyProperty

标签 c# .net wpf

<分区>

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

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

最佳答案

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

性能:DependancyProperties 在幕后发生了很多事情。除非您编写有史以来性能最差的 OnPropertyChanged 方法,否则我敢打赌 INotifyPropertyChanged 也将成为性能赢家。

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

更新

正如评论中提到的那样,DP 的绑定(bind)性能要快一点(快 15-20%,但对于 1000 次绑定(bind)仍然只有不到 50 毫秒的差异),这是由于直接查找/连接所需的反射量特性。这在技术上不同于更新数据绑定(bind) UI 元素的性能,这是我的评论所针对的。但这也不意味着我的赌注仍然正确。因此,一些示例和大量 .NET Reflector 挖掘器后来看起来……没有定论。这两种路径都在幕后做了大量工作,我无法获得任何示例来显示更新性能的明确差异。

我仍然坚持使用 INotifyPropertyChanged,除非我有对 DP 的特定需求,但它至少是一个有趣的练习,可以深入了解 WPF 核心。 :)

关于c# - INotifyPropertyChanged 与 DependencyProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570684/

相关文章:

WPF 主题错误 : Cannot resolve all property references in the property path

WPF 命令绑定(bind) : CanExecute parameter

c# - WP7从墓碑中恢复并返回页面

.net - 分发 F# 应用程序(启动时崩溃)

c# - 是否可以从故障点继续运行代码?

c# - MVVM light示例代码中DataItem的目的是什么?为什么要这样实现?

c# - 高效读取和剪切文件的方法

c# - 合并所有嵌套的 Json 对象

C# Collection 选择属性的值与另一个属性的最小值

.net - 规范化文件路径