このトピックでは、「WPF アプリケーション パフォーマンスの最適化」セクションのトピックで説明されている推奨事項に加えて、パフォーマンスに関する推奨事項を 示します。
このトピックには、次のセクションが含まれています。
オブジェクト へのナビゲーション
ブラシの不透明度と要素の不透明度
Brush を使用して要素の Fill または Stroke を設定する場合は、要素の Opacity プロパティの設定ではなく、Brush.Opacity 値を設定することをお勧めします。 要素の Opacity プロパティを変更すると、WPF によって一時的なサーフェスが作成される可能性があります。
オブジェクトへのナビゲーション
NavigationWindow オブジェクトは Window から派生し、主に NavigationService とジャーナルを統合することで、コンテンツナビゲーションサポートを備えて拡張されます。 uri (uniform resource identifier) またはオブジェクトを指定することで、NavigationWindow のクライアント領域を更新できます。 次の例は、両方の方法を示しています。
private void buttonGoToUri(object sender, RoutedEventArgs args)
{
navWindow.Source = new Uri("NewPage.xaml", UriKind.RelativeOrAbsolute);
}
private void buttonGoNewObject(object sender, RoutedEventArgs args)
{
NewPage nextPage = new NewPage();
nextPage.InitializeComponent();
navWindow.Content = nextPage;
}
Private Sub buttonGoToUri(ByVal sender As Object, ByVal args As RoutedEventArgs)
navWindow.Source = New Uri("NewPage.xaml", UriKind.RelativeOrAbsolute)
End Sub
Private Sub buttonGoNewObject(ByVal sender As Object, ByVal args As RoutedEventArgs)
Dim nextPage As New NewPage()
nextPage.InitializeComponent()
navWindow.Content = nextPage
End Sub
各 NavigationWindow オブジェクトには、そのウィンドウにユーザーのナビゲーション履歴を記録する履歴があります。 ジャーナルの目的の 1 つは、ユーザーが自分の手順を追跡できるようにすることです。
URI (Uniform Resource Identifier) を使用して移動すると、ジャーナルには UNIFORM Resource Identifier (URI) 参照のみが格納されます。 つまり、ページを再訪するたびに動的に再構築され、ページの複雑さに応じて時間がかかる場合があります。 この場合、ジャーナルストレージコストは低くなりますが、ページを再構成する時間が長くなる可能性があります。
オブジェクトを使用して移動すると、ジャーナルにはオブジェクトのビジュアル ツリー全体が格納されます。 つまり、ページを再訪するたびに、再構築しなくてもすぐにレンダリングされます。 この場合、ジャーナルストレージコストは高くなりますが、ページを再構成する時間は低くなります。
NavigationWindow オブジェクトを使用する場合は、ジャーナリング サポートがアプリケーションのパフォーマンスに与える影響に留意する必要があります。 詳細については、「ナビゲーションの概要」を参照してください。
大きな 3D サーフェイスのヒット テスト
大規模な 3D サーフェスでのヒット テストは、CPU 消費量の面で非常にパフォーマンスの高い操作です。 これは、3D サーフェスをアニメーション化する場合に特に当てはまります。 これらのサーフェスでヒット テストを必要としない場合は、ヒット テストを無効にします。 UIElement から派生したオブジェクトは、IsHitTestVisible プロパティを false
に設定することで、ヒット テストを無効にすることができます。
CompositionTarget.Rendering イベント
CompositionTarget.Rendering イベントにより、WPF は継続的にアニメーション化されます。 このイベントを使用する場合は、機会があるごとに取り外してください。
ScrollBarVisibility=Auto の使用を避ける
可能な限り、HorizontalScrollBarVisibility
プロパティと VerticalScrollBarVisibility
プロパティに ScrollBarVisibility.Auto 値を使用しないでください。 これらのプロパティは、RichTextBox、ScrollViewer、および TextBox オブジェクトに対して定義され、ListBox オブジェクトの添付プロパティとして定義されます。 代わりに、ScrollBarVisibility を Disabled、Hidden、または Visibleに設定します。
Auto 値は、スペースが限られており、必要なときにのみスクロール バーを表示する必要がある場合に使用します。 たとえば、数百行のテキストを含む TextBox とは対照的に、ListBox 30 項目のこの ScrollBarVisibility 値を使用すると便利な場合があります。
起動時間を短縮するように Font Cache Service を構成する
WPF フォント キャッシュ サービスは、WPF アプリケーション間でフォント データを共有します。 サービスがまだ実行されていない場合は、最初に実行する WPF アプリケーションによってこのサービスが開始されます。 Windows Vista を使用している場合は、"Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" サービスを "Manual" (既定値) から "Automatic (Delayed Start)" に設定して、WPF アプリケーションの初期起動時間を短縮できます。
関連項目
.NET Desktop feedback