パフォーマンスの最適化 : その他の推奨事項Optimizing Performance: Other Recommendations

このトピックでは、「WPF アプリケーションのパフォーマンスの最適化」セクションのトピックで説明されている推奨事項を補足するパフォーマンスに関する推奨事項について取り上げます。This topic provides performance recommendations in addition to the ones covered by the topics in the Optimizing WPF Application Performance section.

このトピックには、次のセクションが含まれます。This topic contains the following sections:

ブラシの Opacity と要素の OpacityOpacity on Brushes Versus Opacity on Elements

Brush使用して 要素のFillStroke設定する場合は、要素のBrush.OpacityOpacityプロパティを設定するよりも、値を設定することをおし。When you use a Brush to set the Fill or Stroke of an element, it is better to set the Brush.Opacity value rather than the setting the element's Opacity property. 要素のOpacityプロパティを変更すると、一時的WPFWPFなサーフェスが作成される場合があります。Modifying an element's Opacity property can cause WPFWPF to create a temporary surface.

オブジェクトNavigationWindowは、主にWindow集約とジャーナルによって、コンテンツ ナビゲーションのサポートを使用してオブジェクトをNavigationService派生および拡張します。The NavigationWindow object derives from Window and extends it with content navigation support, primarily by aggregating NavigationService and the journal. のクライアント領域は、統一NavigationWindowリソース識別子 (URI) またはオブジェクトのいずれかを指定して更新できます。You can update the client area of NavigationWindow by specifying either a uniform resource identifier (URI) or an object. この両方の方法を次のサンプルに示します。The following sample shows both methods:

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();
    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()
    navWindow.Content = nextPage
End Sub

NavigationWindowオブジェクトには、そのウィンドウにユーザーのナビゲーション履歴を記録するジャーナルがあります。Each NavigationWindow object has a journal that records the user's navigation history in that window. 履歴の目的の 1 つは、ユーザーが自分の来た道を戻れるようにすることです。One of the purposes of the journal is to allow users to retrace their steps.

統一リソース識別子 (URI) を使用してナビゲートする場合、ジャーナルは統一リソース識別子 (URI) 参照のみを格納します。When you navigate using a uniform resource identifier (URI), the journal stores only the uniform resource identifier (URI) reference. したがって、ページに戻るたびにそのページが動的に再構築されることになり、ページの複雑さによってはかなりの時間がかかることもあります。This means that each time you revisit the page, it is dynamically reconstructed, which may be time consuming depending on the complexity of the page. この場合、履歴の格納の負荷は低い反面、ページの再構築にかかる時間が長くなる可能性があります。In this case, the journal storage cost is low, but the time to reconstitute the page is potentially high.

オブジェクトを使用して移動した場合は、オブジェクトのビジュアル ツリー全体が履歴に格納されます。When you navigate using an object, the journal stores the entire visual tree of the object. したがって、ページに戻るたびにページを再構築する必要はなく、ページがすぐに描画されます。This means that each time you revisit the page, it renders immediately without having to be reconstructed. この場合、履歴の格納の負荷は高くなりますが、ページの再構築にかかる時間は短くて済みます。In this case, the journal storage cost is high, but the time to reconstitute the page is low.

オブジェクトをNavigationWindow使用する場合は、ジャーナリング・サポートがアプリケーションのパフォーマンスにどのような影響を与えるのかを念頭に置く必要があります。When you use the NavigationWindow object, you will need to keep in mind how the journaling support impacts your application's performance. 詳細については、「ナビゲーションの概要」を参照してください。For more information, see Navigation Overview.

大きな 3D サーフェイスのヒット テストHit Testing on Large 3D Surfaces

大きな 3D サーフェイスのヒット テストは、CPU 消費の面でパフォーマンスへの影響が非常に大きくなります。Hit testing on large 3D surfaces is a very performance intensive operation in terms of CPU consumption. 3D サーフェイスがアニメーション化されている場合には特にその傾向が強くなります。This is especially true when the 3D surface is animating. そのようなサーフェイスでヒット テストを行う必要がない場合は、ヒット テストを無効にしてください。If you do not require hit testing on these surfaces, then disable hit testing. からUIElement派生したオブジェクトは、プロパティを に設定することでIsHitTestVisibleヒットfalseテストを無効にすることができます。Objects that are derived from UIElement can disable hit testing by setting the IsHitTestVisible property to false.

CompositionTarget.Rendering イベントCompositionTarget.Rendering Event

イベントCompositionTarget.Renderingが連続WPFWPF的にアニメーション化します。The CompositionTarget.Rendering event causes WPFWPF to continuously animate. このイベントを使用する場合は、毎回デタッチしてください。If you use this event, detach it at every opportunity.

ScrollBarVisibility=Auto は使用しないAvoid Using ScrollBarVisibility=Auto

可能な限り、ScrollBarVisibility.AutoHorizontalScrollBarVisibilityプロパティの値をVerticalScrollBarVisibility使用しないでください。Whenever possible, avoid using the ScrollBarVisibility.Auto value for the HorizontalScrollBarVisibility and VerticalScrollBarVisibility properties. これらのプロパティは、RichTextBoxおよびScrollViewerオブジェクトTextBoxに対して定義され、オブジェクトの添付ListBoxプロパティとして定義されます。These properties are defined for RichTextBox, ScrollViewer, and TextBox objects, and as an attached property for the ListBox object. 代わりに、 ScrollBarVisibility DisabledHiddenVisibleまたは に設定します。Instead, set ScrollBarVisibility to Disabled, Hidden, or Visible.

このAuto値は、スペースが限られており、必要な場合にのみスクロールバーを表示する必要がある場合に使用されます。The Auto value is intended for cases when space is limited and scrollbars should only be displayed when necessary. たとえば、数百行のテキストをScrollBarVisibilityListBoxTextBox含むのとは対照的に、この値を 30 項目の 1 つの値で使用すると便利です。For example, it may be useful to use this ScrollBarVisibility value with a ListBox of 30 items as opposed to a TextBox with hundreds of lines of text.

Font Cache サービスの構成による起動時間の短縮Configure Font Cache Service to Reduce Start-up Time

WPF フォント キャッシュ サービスは、WPF アプリケーション間でフォント データを共有します。The WPF Font Cache service shares font data between WPF applications. 最初に実行する WPF アプリケーションは、サービスがまだ実行されていない場合に、このサービスを開始します。The first WPF application you run starts this service if the service is not already running. Windows Vista を使用している場合は、"Windows プレゼンテーション基盤 (WPF) フォント キャッシュ" サービスを "手動" (既定) から "自動 (遅延開始)" に設定して、WPF アプリケーションの初期起動時間を短縮できます。If you are using Windows Vista, you can set the "Windows Presentation Foundation (WPF) Font Cache" service from "Manual" (the default) to "Automatic (Delayed Start)" to reduce the initial start-up time of WPF applications.

関連項目See also