C# パフォーマンスの向上
パフォーマンスの問題
現場にいると
・画面表示される速度が遅い
・初回表示するのが遅い
・使っているとだんだん遅くなる
など色々な意見をもらう。
⇒まず、どこで遅いか切り分ける。
クライアント描画処理?
ネットワークの負荷率?
サーバー処理?
DB処理?
クライアント描画処理
・指定した箇所で描画が行われているか?
・同じ処理が何度も実行されていないかなか?
⇒デバッグで調査
ネットワークの負荷率?
WEB系だとレスポンスをブラウザ(Chrome)等のツールで把握可能
Fiddlerを使用するとどこで遅いか一目瞭然
Fiddler - Free Web Debugging Proxy - Telerik
Fiddlerで各通信の速度が表示される(ネットワークのトラフィックに問題か確認可能)
※ただし、WEBサーバー⇒DBサーバの通信の問題は分からない。
改善方法
インフラ周りの改善(お金がかかる)
引数・戻り値のデータ圧縮
通信の際に最小限のデータのやりとりとする(制約やデータの見直し)
サーバ処理
VisualStudioのプロファイラを使用して、デバッグする。
CPUの負荷がかかっている箇所が分かる。
https://msdn.microsoft.com/ja-jp/library/ms182372.aspx
DB処理
※初回だけ遅い等の症状がある場合は、SQLサーバーのキャッシュを
削除してから行う。
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE
SQLが遅い場合は、
・インデックスの見直し
・ストアドにするか検討
・バッチで集計するかとう検討
初回のみ症状が発生した場合
初回ストアド等の読み込み等に時間がかかるため、調整が必要。
問題が発生しなかった場合
APサーバからDBサーバの通信問題のため、
・インフラ対応
・取得するデータ量の見直し・設計見直し
※SQL回数分遅くなるため、下記のような対応も必要な可能性あり。
BulkCopy
SQL Server でのバルク コピー操作 | Microsoft Docs
APサーバのキャッシュを保持