不必要的NotifyPropertyChanged调用会导致性能问题吗?

onl*_*e19 4 c# wpf mvvm inotifypropertychanged

在我的新WPF应用程序中,我正在重用一个Model类.在该模型类中,其setter中的所有属性都会触发NotifyPropertyChanged.在我的应用程序中,我真的没有为个人财产解雇INPC的用例.我需要知道,如果我保留当前的架构,其中每个属性在每次更改时触发INPC,它是否会导致任何性能影响?在不需要时,让个别属性触发INPC是否有意义?

Mua*_*Dib 5

一般来说,只要您运行一段您不需要的代码,就可能导致性能问题.

根据经验,当您为属性编写setter而不是仅设置后备字段并引发更改事件时,应通知之前检查相等性,从而避免不必要的更新.

例如:

public int MyInteger 
{
   get { return this._myInteger; }
   set { 
         if ( value != this._myInteger )
         {
            this._myInteger = value;
            RaiseChangedEvent("MyInteger");
         }
      }
Run Code Online (Sandbox Code Playgroud)

您还应检查方法中的附加事件RaiseChangedEvent,因此如果没有侦听器,则不会抛出空引用异常,并且不会不必要地进行调用:

private void RaiseChangedEvent(string propertyName)
{
   var changedHandler = this.PropertyChanged ;
   if ( changedHandler != null )
      changedHandler(this, new PropertyChangedEventArgs( propertyName ) );
}
Run Code Online (Sandbox Code Playgroud)