ほのぼの C#開発

開発の基礎から、現場で使用できるC#を掲載していきます。

C# パフォーマンスの向上

パフォーマンスの問題

現場にいると

・画面表示される速度が遅い
・初回表示するのが遅い
・使っているとだんだん遅くなる

など色々な意見をもらう。

 

⇒まず、どこで遅いか切り分ける。

 クライアント描画処理?

 ネットワークの負荷率?

 サーバー処理?

 DB処理?

 クライアント描画処理

  

  ・指定した箇所で描画が行われているか?

  ・同じ処理が何度も実行されていないかなか?

   ⇒デバッグで調査

   

ネットワークの負荷率?

  WEB系だとレスポンスをブラウザ(Chrome)等のツールで把握可能

  Fiddlerを使用するとどこで遅いか一目瞭然

  Fiddler - Free Web Debugging Proxy - Telerik

 

  Fiddlerで各通信の速度が表示される(ネットワークのトラフィックに問題か確認可能)

  IEIIS

  IISASP.Net

  ※ただし、WEBサーバー⇒DBサーバの通信の問題は分からない。

  改善方法

   インフラ周りの改善(お金がかかる)

   引数・戻り値のデータ圧縮

   通信の際に最小限のデータのやりとりとする(制約やデータの見直し)

  

 サーバ処理

  VisualStudioのプロファイラを使用して、デバッグする。

  CPUの負荷がかかっている箇所が分かる。 

  https://msdn.microsoft.com/ja-jp/library/ms182372.aspx

 

 DB処理

  SQLサーバーで直接指定のSQLを実行する

  ※初回だけ遅い等の症状がある場合は、SQLサーバーのキャッシュを

  削除してから行う。

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

 

SQLが遅い場合は、

  ・インデックスの見直し

  ・ストアドにするか検討

  ・バッチで集計するかとう検討

 

初回のみ症状が発生した場合

  初回ストアド等の読み込み等に時間がかかるため、調整が必要。

   

問題が発生しなかった場合

  APサーバからDBサーバの通信問題のため、

   ・インフラ対応

   ・取得するデータ量の見直し・設計見直し

 

  ※SQL回数分遅くなるため、下記のような対応も必要な可能性あり。

       BulkCopy

                         SQL Server でのバルク コピー操作 | Microsoft Docs

       APサーバのキャッシュを保持