ElementName или RelativeResource?

Какие из следующих привязок TextBlocks требуют большей производительности:

<Window  
  x:Name="Me"
  x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  xmlns:src="clr-namespace:WpfApplication1" 
  Title="MainWindow">
  <StackPanel>
    <TextBlock Text="{Binding Title, ElementName=Me}"/>
    <TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType={x:Type src:MainWindow}}}"/>
  </StackPanel>    
</Window>

Я уверен, что мой вопрос может принять другое решение, если TextBlocks находятся в высокой степени вложенности уровень, имеющий много братьев, сестер и предков.

Соображения

(основываясь только на личных мыслях, я могу ошибаться в каждом конкретном!):

  • ElementName :

    • Может искать и сравнивать текущий элемент с больше контроля через всех его дочерних элементов, братьев и сестер, дядей и великих дядей, включая предков (может быть, существует HashTable всех зарегистрированных имен?)
    • Получение свойства Name элемента управления должно стоить меньше производительности, чем вызов GetType .
    • Сравнение строки дешевле, чем сравнение типов, особенно если вы знаете, что большинство элементов управления не даже есть их набор Имя .
  • FindAncestor :

    • Будет повторяться только через предков, а не через «дядей», «кузенов» братьев и сестер и т. Д.
    • Скорее всего, использует GetType для определения типа предка; GetType требует большей производительности, чем простой метод получения свойств Name (может быть, DP разные?)
16
задан Shimmy 1 December 2010 в 10:08
поделиться