パフォーマンスの最適化: 他の推奨事項

このトピックでは、「WPF アプリケーションのパフォーマンスの最適化」セクションのトピックで説明されている推奨事項を補足するパフォーマンスに関する推奨事項について取り上げます。

このトピックは、次のセクションで構成されています。

ブラシの Opacity と要素の Opacity

Brush を使用して要素の FillStroke を設定するときには、要素の Opacity プロパティを設定するのではなく、Brush.Opacity の値を設定することをお勧めします。 要素の Opacity プロパティを変更すると、WPF によって一時的なサーフェイスが作成される可能性があります。

NavigationWindow オブジェクトはWindow から派生し、コンテンツ ナビゲーションのサポートで Window を拡張します。この拡張は、主に NavigationService と履歴を統合することによって行われます。 NavigationWindow のクライアント領域は、Uniform Resource Identifier (URI) またはオブジェクトを指定することで更新できます。 この両方の方法を次のサンプルに示します。

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 つは、ユーザーが自分の来た道を戻れるようにすることです。

Uniform Resource Identifier (URI) を使用して移動した場合、履歴には Uniform Resource Identifier (URI) の参照のみが格納されます。 したがって、ページに戻るたびにそのページが動的に再構築されることになり、ページの複雑さによってはかなりの時間がかかることもあります。 この場合、履歴の格納の負荷は低い反面、ページの再構築にかかる時間が長くなる可能性があります。

オブジェクトを使用して移動した場合は、オブジェクトのビジュアル ツリー全体が履歴に格納されます。 したがって、ページに戻るたびにページを再構築する必要はなく、ページがすぐに描画されます。 この場合、履歴の格納の負荷は高くなりますが、ページの再構築にかかる時間は短くて済みます。

NavigationWindow オブジェクトを使用するときは、履歴のサポートがアプリケーションのパフォーマンスにどのように影響するのかを念頭に置いておく必要があります。 詳細については、「ナビゲーションの概要」を参照してください。

大きな 3D サーフェイスのヒット テスト

大きな 3D サーフェイスのヒット テストは、CPU 消費の面でパフォーマンスへの影響が非常に大きくなります。 3D サーフェイスがアニメーション化されている場合には特にその傾向が強くなります。 そのようなサーフェイスでヒット テストを行う必要がない場合は、ヒット テストを無効にしてください。 UIElement から派生したオブジェクトでは、IsHitTestVisible プロパティを false に設定することでヒット テストを無効にできます。

CompositionTarget.Rendering イベント

CompositionTarget.Rendering イベントにより、WPF は常にアニメーション化されます。 このイベントを使用する場合は、毎回デタッチしてください。

ScrollBarVisibility=Auto は使用しない

HorizontalScrollBarVisibility プロパティと VerticalScrollBarVisibility プロパティには、できる限り ScrollBarVisibility.Auto 値を使用しないでください。 これらのプロパティは、RichTextBoxScrollViewerTextBox の各オブジェクトと、ListBox オブジェクトの添付プロパティのために定義されています。 代わりに、ScrollBarVisibilityDisabledHidden、または 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 アプリケーションの最初の起動時間を短縮できます。

関連項目