2010-09-09 20 views
2

我有一個CLR實例屬性,靜態的PropertyPath指向實例屬性和XAML綁定直接使用靜態的PropertyPath像這樣:Wpf綁定路徑對性能的影響= {x:Static <propertypath>}?

NB:GetPropertyPath僅僅是其返回基於給定的PropertyPath的方法從成員名稱中獲得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時尚的DataContext XAML綁定給出如下:

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

這種方法具有重大的利益爲代碼不使用未檢查的部分的任何引用的構建。如果viewmodel代碼中的某些內容發生更改,則xaml會在構建時發生綁定錯誤(如果它們不再正確)。

我的問題是,任何人都知道這種方法可能有任何負面的性能影響?

回答

0

前一段時間我們只測試了你的問題的第一部分。 OnPropertyChanged(string propertyName)OnPropertyChanged(Expression<Func<object>> expression)之間的性能差異是多少?後者類似於你的GetPropertyPath()方法,它比基於原始字符串的方法慢了約2.5倍(在1 000 000次迭代中,569毫秒比1464毫秒)。對於代碼清晰度來說,這似乎不是一個巨大的代價,但使用Expressions時,不應忽視內存影響。

我的一般建議是在非密集計算中使用表達式,否則就避免使用表達式。我從來沒有發現這個代碼的特定部分的瓶頸 - 總是有一些顯着更慢的東西...

0

我認爲GetPropertyPath()的影響在這裏是相當可忽略的,因爲我將結果保存在靜態變量中,而不是反覆調用,直接使用 'OnPropertyChanged(Expression> expression)'將需要。

但是,我對數據綁定的內部有點模糊,會直接向xaml提供x:Static propertypath來提供任何性能改進?我是否使用x:static來降低性能?