159
172

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WPFパフォーマンス関連の記事まとめ

159
Last updated at Posted at 2015-04-12

WPFは非常に高機能ですが、扱い方を間違えると大火傷を負います。
簡単にですが、頭の片隅に残しておくべきWPFのパフォーマンス関連の記事をまとめました。

はじめに

MSDN

まず気をつけるべきことが記載されています。にしても結構なボリューム。。
・
https://docs.microsoft.com/dotnet/desktop/wpf/advanced/optimizing-wpf-application-performance

・https://docs.microsoft.com/previous-versions/msp-n-p/ff647792(v=pandp.10)

気をつけるべき10のことみたいなやつ

WPFアプリのパフォーマンスを良くする10の方法

・http://www.codeguru.com/csharp/.net/net_wpf/article.php/c18025/10-Ways-to-Improve-the-Performance-of-Your-WPF-Application.htm

  1. BitmapImageのスケールを小さくしろ
  2. FlowDocument内にTextBlock使わないでRun使え
  3. DynamicResourceではなくStaticResource使え
  4. でかいオブジェクトを描画したい場合はUI Virtualization(仮想化) 使え
  5. リッチじゃないUIだったらScrollは Deferredを指定せよ
  6. 起動時間を速くさせたいなら、PresentationFontCache Serviceを起動させておけ
  7. 不要になったアニメーションはUnloadedイベントでRemoveせよ
  8. Containerのプロパティは可能であればRecycle使え
  9. ハードウェアレンダリングかソフトウェアレンダリングかの識別はRenderCapability.Tier使えばできるよ
  10. 調査用ツールを使え

WPFのパフォーマンスを改善する12の方法

・http://pelebyte.net/blog/2011/07/11/twelve-ways-to-improve-wpf-performance/

  1. Binding Errorを回避せよ( PrismのBindingBaseBindableBase/NotificationObjectであればデバッグ時にVisual Studioのデバッグ出力ウィンドウに警告が出力されます)
  2. 可能であれば高さと幅は固定にしろ(XAML上にハードコードしろ)
  3. CollectionViewのGrouping機能は使うな
  4. コレクション(ObservableCollection) への変更通知を最適化せよ (ObservableCollectionは要素をAddするたびに変更通知走っちゃう )
  5. DynamicResourceは避けよ
  6. ResourceDictionaryは避けよ ResourceDictionaryを生成するのはすごいコストだぜ
  7. Visual Treeを Simpleに保て
  8. System.Windows.Interactivity.Behavior.OnDetachingは呼ばれないことがあるので注意してください
  9. いくつかの理由により、DependencyPropertyDescriptorは使うな
  10. ViewModelのイベントに注意せよ(WeakEventManager使ってリークしないようにしようね)
  11. でかいデータを取得するならDispatcher.BeginInvokeで(よくわからないが非同期処理しろってことかな)
  12. メモリリークに常に注意を払え

WPFパフォーマンス 10Tips

・http://www.wpftutorial.net/10PerformanceTips.html

  1. BackgroundWorkerなりBeginInvokeなりで処理しろ
  2. Binding Errorを回避せよ
  3. Visual の数を減らせ(Visual TreeをSimpleに保て )
  4. ソフトウェアレンダリングを防げ
  5. Resourceは必要になったときに読め
  6. 仮想化せよ(VirtualizingStackPanel利用のところは)
  7. Containerのプロパティは可能であればRecycle使え
  8. FreezeできるところはFreezeしろ(PresentationOptions:Freeze="true")
  9. アセンブリのロケーションをDisableに
  10. アニメーションのフレームレートを下げろ
  11. PathGeometriesじゃなくてStreamGeometriesを使え

調査用ツール

WPF Performance Suite レンダリング関連に強い。

・https://msdn.microsoft.com/ja-jp/library/aa969767%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

・http://blogs.msdn.com/b/jgoldb/archive/2010/05/25/wpfperf-performance-profiling-tools-for-wpf-4-is-now-available.aspx

Snoop WPFオブジェクトのバインディングなど

・https://snoopwpf.codeplex.com/
このサイトが詳しいです!

Memory Leak 調査用

・http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx

Resharper Binding ErrorなどをVisual Studio上で提示してくれる・・・が有料。

・http://www.jetbrains.com/resharper/features/xaml_editor.html

XAMLのBinding Errorの調査に活用。

ResourceDictionary遅い

・http://leecampbell.blogspot.jp/2010/05/mergeddictionaries-performance-problems.html

レンダリング

・http://www.codeproject.com/Articles/784529/Solutions-for-WPF-Performance-Issue

・http://kynosarges.org/WpfPerformance.html

・http://blog.xamlwonderland.com/

コンバーター

・http://stackoverflow.com/questions/7347911/converter-best-practice-for-better-performance

メモリリーク

・https://atomaras.wordpress.com/2012/04/23/solving-mvvmlights-eventtocommand-memory-leak-wp7/

画像(Image/BitmapImage)関連

・http://d.hatena.ne.jp/fkmt5/20130729/1375090831

・http://code.logos.com/blog/2008/04/memory_leak_with_bitmapimage_and_memorystream.html

・http://blogs.msdn.com/b/llobo/archive/2009/11/10/new-wpf-features-cached-composition.aspx?wa=wsignin1.0

・http://stackoverflow.com/questions/2463852/how-can-i-keep-a-wpf-image-from-blocking-if-the-imagesource-references-an-unreac

・http://blogs.msdn.com/b/dditweb/archive/2007/08/22/speeding-up-image-loading-in-wpf-using-thumbnails.aspx

バインディング関連

・http://stackoverflow.com/questions/7687000/fast-performing-and-thread-safe-observable-collection

・https://support.microsoft.com/ja-jp/kb/938416/en-us?wa=wsignin1.0

・http://stackoverflow.com/questions/160391/listbox-with-grid-as-itemspaneltemplate-produces-weird-binding-errors

特定のコントロールに特化

DataGrid

・http://stackoverflow.com/questions/11379357/wpf-net-4-datagrid-column-performance

xamDataGrid

・http://www.infragistics.com/community/blogs/kiril_matev/archive/2010/10/26/optimizing-xamdatagrid-performance.aspx

・http://www.infragistics.com/community/forums/t/48307.aspx

・http://stackoverflow.com/questions/23660485/wpf-xamdatagrid-hierarchical-load-on-demand-dynamic-columns

・http://www.infragistics.com/community/forums/t/68474.aspx

・http://brianlagunas.com/xamdatagriddynamically-create-and-data-bind-columns-with-an-editor-of-your-choice/

・http://www.infragistics.com/community/forums/t/43169.aspx

最後の手段(ProgressBar/SplashWindow)関連

・http://www.codeproject.com/Articles/35288/WPF-Circular-Progress-Bar

・http://romenlaw.blogspot.jp/2008/07/wpf-splash-with-progressbar.html

・http://www.codeproject.com/Articles/38291/Implement-Splash-Screen-with-WPF

・http://stackoverflow.com/questions/22026209/wpf-splashscreen-with-progressbar

.NETアプリケーションの起動時間短縮方法

番外

WCF

・http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx

いやー、色々注意しないといけないですね。
本当に難しい。WPF+XAML。

159
172
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
159
172

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?