156
171

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 3 years have passed since last update.

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

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アプリケーションの起動時間短縮方法
https://msdn.microsoft.com/ja-jp/library/cc656914%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

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

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

156
171
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
156
171

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?