次の TextBlocks の Bindings のうち、より多くのパフォーマンスを犠牲にするものはどれですか:
<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
。 - 文字列を比較する方が、型を比較するよりも安価です。特に、ほとんどのコントロールにセットがないことがわかっている場合はなおさら
Name
です。
FindAncestor
:- 兄弟の「叔父」、「いとこ」などではなく、祖先を介してのみ反復します。
GetType
先祖の型を決定するために使用される可能性が最も高いです。GetType は、単純なName
プロパティ ゲッターよりもパフォーマンスが高くなります (DP が異なる可能性がありますか?)