gpt4 book ai didi

wpf - 使用 linq 表达式的类型安全 NotifyPropertyChanged

转载 作者:行者123 更新时间:2023-12-04 11:45:12 25 4
gpt4 key购买 nike

表格 Build your own MVVM我有以下代码可以让我们进行类型安全的 NotifyOfPropertyChange 调用:

public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> 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);
}

这种方法与标准的简单字符串方法性能相比如何?有时我的属性会以非常高的频率变化。我可以安全地使用这种类型安全的方法吗?经过一些初步测试后,它似乎确实有所不同。这种方法可能会导致内存负载多少 CPU?

最佳答案

引发此问题的代码是什么样的?我猜它是这样的:

NotifyOfPropertyChange(() => SomeVal);

这是隐含的:
NotifyOfPropertyChange(() => this.SomeVal);

它捕获了 this ,并且几乎意味着每次都必须从头开始构建表达式树(使用 Expression.Constant )。然后你每次都解析它。所以开销绝对不是小事。

太多 尽管?这是一个只有您可以通过分析和了解您的应用程序才能回答的问题。对于很多 MVC 使用来说,它被认为是可以的,但这不是(通常)在长时间运行的紧密循环中调用它。基本上,您需要针对所需的性能目标进行分析。

关于wpf - 使用 linq 表达式的类型安全 NotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com