パフォーマンスの最適化 : その他の推奨事項
このトピックでは、「WPF アプリケーションのパフォーマンスの最適化」のトピックで説明されている推奨事項を補足するパフォーマンスに関する推奨事項について説明します。
このトピックは、次のセクションで構成されています。
ブラシの Opacity と要素の Opacity
オブジェクトへの移動
大きな 3D サーフェイスのヒット テスト
CompositionTarget.Rendering イベント
ScrollBarVisibility=Auto は使用しない
Font Cache サービスの構成による起動時間の短縮
ブラシの Opacity と要素の Opacity
Brush を使用して要素の Fill や Stroke を設定するときには、要素の Opacity プロパティを設定するより Brush.Opacity 値を設定することをお勧めします。 要素の Opacity プロパティを変更すると、WPF によって一時的なサーフェイスが作成される可能性があります。
オブジェクトへの移動
NavigationWindow オブジェクトは Window から派生し、コンテンツ ナビゲーションのサポートでウィンドウを拡張します。この拡張は、主に NavigationService と履歴を統合することによって行われます。 NavigationWindow のクライアント領域は、uniform resource identifier (URI) またはオブジェクトを指定することによって更新できます。 この両方の方法を次のサンプルに示します。
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
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;
}
各 NavigationWindow オブジェクトには、そのウィンドウのユーザーのナビゲーションを記録する履歴があります。 履歴の目的の 1 つは、ユーザーが自分の来た道を戻れるようにすることです。
uniform resource identifier (URI) を使用して移動した場合、履歴には uniform resource identifier (URI) の参照のみが格納されます。 したがって、ページに戻るたびにそのページが動的に再構築されることになり、ページの複雑さによってはかなりの時間がかかることもあります。 この場合、履歴の格納の負荷は低い反面、ページの再構築にかかる時間が長くなる可能性があります。
オブジェクトを使用して移動した場合は、オブジェクトのビジュアル ツリー全体が履歴に格納されます。 したがって、ページに戻るたびにページを再構築する必要はなく、ページがすぐに描画されます。 この場合、履歴の格納の負荷は高くなりますが、ページの再構築にかかる時間は短くて済みます。
NavigationWindow オブジェクトを使用するときには、履歴のサポートがアプリケーションのパフォーマンスにどのように影響するのかを念頭に置いておく必要があります。 詳細については、「ナビゲーションの概要」を参照してください。
大きな 3D サーフェイスのヒット テスト
大きな 3D サーフェイスのヒット テストは、CPU 消費の面でパフォーマンスへの影響が非常に大きくなります。 3D サーフェイスがアニメーション化されている場合には特にその傾向が強くなります。 そのようなサーフェイスでヒット テストを行う必要がない場合は、ヒット テストを無効にしてください。 UIElement から派生したオブジェクトでは、IsHitTestVisible プロパティを false に設定することによってヒット テストを無効にできます。
CompositionTarget.Rendering イベント
CompositionTarget.Rendering イベントは、WPF を常にアニメーション化します。 このイベントを使用する場合は、毎回デタッチしてください。
ScrollBarVisibility=Auto は使用しない
できる限り、ScrollBarVisibility.Auto 値を HorizontalScrollBarVisibility プロパティと VerticalScrollBarVisibility プロパティでは使用しないでください。 これらのプロパティは、RichTextBox、ScrollViewer、TextBox、ListBox の各オブジェクトで定義されています。 代わりに、ScrollBarVisibility を Disabled、Hidden、または Visible に設定します。
Auto 値は、スペースが限られていて、スクロール バーを必要なときにだけ表示する場合に使用するための値です。 ScrollBarVisibility 値の使用は、たとえば、数百行のテキストを含む TextBox ではなく、30 の項目を含む ListBox で役に立ちます。
Font Cache サービスの構成による起動時間の短縮
WPF Font Cache サービスは、WPF アプリケーション間でフォント データを共有します。 このサービスがまだ実行されていない場合は、実行する最初の WPF アプリケーションによって開始されます。 Windows Vista を使用している場合は、[Windows Presentation Foundation (WPF) Font Cache 3.0.0.0] サービスの設定を [手動] (既定) から [自動 (遅延開始)] に変更することで、WPF アプリケーションの最初の起動時間を短縮できます。