Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Давно уже ни для кого не секрет, что DependencyProperty тормознее ручной реализации INPC.
Байдинг от слова байда или байдарка? ;)
Да, в тест-проекте тестируется только запись свойства и перезапись с другим значением. Это нужно для того, чтобы выпятить на поверхность тот функционал, производительность которого я и хочу сравнивать.
Давайте не будем забывать, что dependency properties это костыль, придуманный MS исключительно ради Attached properties, типо Grid.Column.
В итоге вы не сравнили ничего, точнее сравнили, но впустую. DependencyObject нужно использовать только в контексте с байдингом
Сколько значений в одно время может иметь Dependency Property?
Выигрывая в транспортировке значения как object в случае композитных data-binding, мы проигрываем в использовании этого свойства в коде, т.к. typecast и извлечение значение из Dictionary по ключу инстанса DependencyProperty — это все-таки накладные расходы.
Еще интересно покопаться в классах CLRPropertyListener и DependencyPropertyListener, станет ясно, что логика везде одинаковая…
staticExpression<Func<LambdaNPC, string>> MyPropertyExpression = o => o.MyProperty;
private string _MyProperty;
public string MyProperty
{
get { return _MyProperty; }
set
{
if (_MyProperty == value)
{
return;
}
_MyProperty = value;
RaisePropertyChanged(MyPropertyExpression);
}
}
void RaisePropertyChanged<T>(Expression<Func<LambdaNPC, T>> raiser)
{
var e = PropertyChanged;
if (e != null)
{
var propName = ((MemberExpression)raiser.Body).Member.Name;
e(this, new PropertyChangedEventArgs(propName));
}
}
Борьба с INotifyPropertyChanged или как я стал опенсорсником — 2