2010-04-15 36 views
0

我目前正在對我的第一個WPF應用程序,我很好奇,是否我會做這樣的事情碰釘子打倒性能行:綁定相對源代碼與直接對象是否有性能問題?

Dim binding As New Binding("PropertyOnObject.Property1.Property2.Value") 
binding.Source = Object 

VS做

Dim binding As New Binding("Value") 
binding.Source = Object.PropertyOnObject.Property1.Property2 

我的對象是相當動態的,因爲PropertyOnObject可以改變(並因此改變Property1和Property2),所以它是有道理的做到這一點的第一種方式。儘管如此,是否有性能損失?

回答

2

第二個綁定可能會稍微好一點,因爲WPF不需要遍歷冗長的屬性路徑,但它具有不同的語義。在第一個綁定中,如果PropertyOnObject,Property1,Property2或Value中的任何一個發生更改,則綁定將被重新評估。在第二個綁定中,屬性鏈將在設置Source時解析,綁定源將爲,無論Property2當時是否爲。因此,如果(說)Property1更改爲引用不同的實體,則不會更新綁定,因爲綁定獨立於引用鏈而附加到Property2對象。只有當您更改原始Property2對象上的值時纔會進行綁定更新。

既然你想要第一個行爲,你需要寫第一個綁定,並支付輕微的性能損失。以第二種方式寫它可能會更快,但會給你錯誤的結果。

請注意,除非您擁有大量的這些綁定,否則性能損失將不顯着:您在這裏使用的是UI時間表,因此這裏或那裏幾毫秒無關緊要。除非您確定它確實導致問題,否則不要嘗試優化綁定。

+0

+1提到性能損失可能是微不足道的。鑑於現代處理器在* nano *第二級工作,他們可以在一毫秒內完成驚人的工作量。由於我們正在討論人類時間尺度上的交互,所以50毫秒左右的任何事情都不會被察覺。 – Bevan 2010-04-15 22:14:33

+0

+1提及有關更新行爲的兩個選項之間的差異。 – gehho 2010-04-20 09:58:06