безопасный с точки зрения типов NotifyPropertyChanged с помощью linq выражения

Форма Создает Ваш собственный MVVM, у меня есть следующий код, который позволяет нам иметь безопасные с точки зрения типов вызовы NotifyOfPropertyChange:

public void NotifyOfPropertyChange(Expression> property)
{
    var lambda = (LambdaExpression)property;
    MemberExpression memberExpression;
    if (lambda.Body is UnaryExpression)
    {
        var unaryExpression = (UnaryExpression)lambda.Body;
        memberExpression = (MemberExpression)unaryExpression.Operand;
    }
    else memberExpression = (MemberExpression)lambda.Body;
    NotifyOfPropertyChange(memberExpression.Member.Name);
 }

Как этот подход выдерживает сравнение со стандартным performancewise подхода простых строк? Иногда у меня есть свойства, которые изменяются в очень высокой частоте. Действительно ли я в безопасности использовать этот безопасный с точки зрения типов подход? После некоторых первых тестов это, действительно кажется, имеет небольшое значение. Сколько ЦП потенциально, вызывает загрузка в память, это приближается?

7
задан bitbonk 26 April 2010 в 06:18
поделиться

2 ответа

Как выглядит код, который это вызывает? Я предполагаю, что это что-то вроде:

NotifyOfPropertyChange(() => SomeVal);

что неявно:

NotifyOfPropertyChange(() => this.SomeVal);

что делает захват этого, и практически означает, что дерево выражений должно строиться (с Expression.Constant) с нуля каждый раз. А затем каждый раз разбирать его. Так что накладные расходы определенно нетривиальны.

Является ли это слишком много? Это вопрос, на который можете ответить только вы, с помощью профилирования и знания вашего приложения. Считается, что это нормально для многих случаев использования MVC, но это (как правило) не вызов его в длинном узком цикле. Вам нужно профилировать по желаемой цели производительности, в основном.

5
ответ дан 7 December 2019 в 05:19
поделиться

Эмиэль Джонгериус провел хорошее сравнение производительности различных реализаций INotifyPropertyChanged.

http://www.pochet.net/blog/2010/06/25/inotifypropertychanged-implementations-an-overview/

Суть в том, что если вы используете INotifyPropertyChanged для привязки данных в пользовательском интерфейсе, тогда различия в производительности разных версий несущественно.

2
ответ дан 7 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: