【问题标题】:Performance impact of Wpf Binding Path={x:Static <propertypath>}?Wpf Binding Path={x:Static <propertypath>} 的性能影响?
【发布时间】:2010-09-09 07:01:18
【问题描述】:

我有一个 CLR 实例属性、一个指向实例属性的静态 PropertyPath 和一个直接使用静态 PropertyPath 的 xaml 绑定,如下所示:

注意:GetPropertyPath 是一个简单的方法,它根据成员名称中的给定 linq 表达式返回属性路径。

public static PropertyPath MyPropertyPath = GetPropertyPath(p=> p.MyProperty); private object _myProperty; public object MyProperty { get{ return _myProperty;} set { _myProperty = value; OnPropertyChanged(MyPropertyPath.Path); } }

然后使用 MyViewModel 作为标准 mvvm 方式的数据上下文,xaml 绑定如下:

 
    {Binding Path={x:Static myNamespace:MyViewModel.MyPropertyPath}}

这种方法有很大的好处,因为代码不使用任何未在构建过程中检查的引用。如果 viewmodel 代码中的某些内容发生更改,如果它们不再正确,则会在构建时出现 xaml 绑定错误。

我的问题是,有人知道这种方法可能对性能产生任何负面影响吗?

【问题讨论】:

    标签: wpf data-binding xaml


    【解决方案1】:

    前段时间,我们只测试了您问题的第一部分。 OnPropertyChanged(string propertyName)OnPropertyChanged(Expression&lt;Func&lt;object&gt;&gt; expression) 之间的性能差异是什么?后者类似于您的 GetPropertyPath() 方法,它比基于原始字符串的方法慢约 2.5 倍(569 毫秒 vs 1464 毫秒,1 000 000 次迭代)。这对于代码清晰度来说似乎不是一个巨大的代价,尽管在使用Expressions 时不应忽视内存影响。

    我的一般建议是在非密集计算中使用表达式,否则应避免使用它们。我从来没有在代码的这个特定部分发现瓶颈 - 总是有一些明显慢的东西......

    【讨论】:

      【解决方案2】:

      我认为 GetPropertyPath() 的影响在这里可以忽略不计,因为我将结果保存在静态变量中,而不是像使用时那样重复调用 'OnPropertyChanged(Expression> 表达式)' 直接。

      然而,我对数据绑定的内部结构有点模糊,将 x:Static 属性路径直接提供给 xaml 会提供任何性能改进吗?使用 x:static 会降低性能吗?

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 1970-01-01
        • 2010-12-24
        • 2022-01-24
        • 1970-01-01
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多