2010-06-23 68 views
7

如果您需要從後面的代碼訪問WPF控件,則需要在XAML中爲其提供Name屬性。在WPF中未指定控件名稱...性能影響

在許多情況下,您不需要從後面的代碼訪問控件,因爲很多編碼邏輯(如綁定)可以直接在XAML中直接應用。

我的問題是:從不是提供的性能增益提供name屬性控制?或者給頁面上的所有控件提供名稱是一種好習慣?

回答

14

是的,沒有提供「名稱」屬性肯定會有性能提升。

WPF的「名稱」的機制可能是有用的,但它使用額外的內存和CPU在幾個方面:

  1. 的XAML編譯器在類中分配一個額外的插槽爲每個命名對象(各4字節)
  2. 的XAML編譯器添加代碼到你的類initate每一種
  3. 的BAML處理器回調你的代碼在每種情況下
  4. 的BAML處理器還增加了名字的字典,需要一個額外的20初始化名+每個字節的字節數
  5. 當仰視的名字,你真的需要你可能會碰到字典碰撞與你並不真的需要

對於一個簡單的控制名稱,添加姓名,從而控制可以增加5使用成本的控制% 或者。這並不是很多,但爲什麼浪費你的CPU週期和你的RAM是不必要的名字?

底線:如果您不需要對象上的名稱,請不要命名它們。通常,控件的內容或綁定足以識別控件的目的。如果這不是足夠的文檔,你總是可以使用XML註釋,這是免費的。

我不得不說這是一個非常糟糕的習慣命名所有控件,而不僅僅是因爲成本,而且還因爲它鼓勵你通過名字來參考您的控制,而不是使用適當的視圖模型和綁定技術。我的大部分XAML都不使用「名稱」來控制任何控件,更不用說所有這些控件了。

+0

我現在感覺不好,我仍然沒有正確的綁定,並且我必須命名所有用數據提供的控件。 :\老問題,但真的很好。 +1的答案和問題 – Malavos 2014-06-05 17:26:28