[Windows] wpfアプリケーションの性能改善の記事

msdn libraryのWPFアプリケーションパフォーマンスの改善に関するドキュメント。このページが何本かの記事のインデックスになっており、WPF使用上の注意やコツが書かれている。

Optimizing WPF Application Performance
http://msdn.microsoft.com/en-us/library/aa970683.aspx

msdn blogのVisual Studio blogにもVisual StudioとWPFがらみのperformanceトピックがある。
WPF in Visual Studio 2010 – Part 2 : Performance tuning

http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx

この記事のToolの項目は、実際に開発に使用したツール類の紹介。Visual StudioのProfilerの機能はpremiumかUltimateのライセンスが必要なので手元のはProfessionalで使えない。(残念。)  同じblogで説明されているWindows Performance Analysis Toolsというのがある。これはWindows SDKにはいっている。Program filesのWindows SDKの下のRedistにあるmsiを実行してインストールする。SDKには WPF Performance suiteも入っていてVisual Profiler機能が使える。これらは同じmsiからインストールされるようだ。

上のblog記事ではVisual Studioチームが開発で実際に使ったテクニックがtipsとして紹介されている。やはり、Visual Treeを簡潔にしないとパフォーマンスに影響が大のようだ。

以下のWPF performance suiteの説明を読むと今抱えている問題に使えそうなので、使うことができたら記録することを忘れずに。

http://windowsclient.net/wpf/perf/wpf-perf-tool.aspx

Visual studioチームのblog内容のサマリーは以下のとおり。

  • drop shadowのようなbitmap関連のエフェクトは簡単な部品にたいして、補完的に使うようにするべき。大きい複雑な(VSのツールバーなど)に使うとパフォーマンスが落ちる。
  • IRTs (Intermediate Render Targets) が増えるとGPUのメモリを消費する。VSの例では、grayscaleを作るのに使ったFormatConvertedBitmapがIRTを増加させていた。perforatorで判明した。これは専用のアルゴリズムで書き直した。
  • templateのvisual treeが深すぎるとパフォーマンスを劣化させる。VSでは非表示時のtemplateと表示時のtemplateは入れ替える。試していないがstyleからcodeに複雑な部分を移すことも効果があったかも。
  • Application.ResourceDictionaryへの大規模な変更は注意深く。ごっそり入れ替えてPropertyChanged notificationがたくさん飛ぶと遅い。
  • MeasureOverride とArrangeOverrideにDouble.PositiveInfinityを渡すとdon’t careの意味になる。
  • BindingExpression path errorは性能劣化につながる。Databindingをデバッグせよ。
  • リモートデスクトップの圧縮を意識した画面を作る。VisualScrollableAreaClip.を使ってスクロールを効率化。
  • virtual machineと能力の低いグラフィックスに対応する。RenderOptions.ProcessRenderMode。
  • 性能を改善するときにもメモリーリークはチェックする。
広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。