LoginSignup
0
0

C#でメモリリークの調査方法

Last updated at Posted at 2024-04-13

再現させる

  • Prismの問題かどうかは不明
  • 再現しているPCのスペックに合わせる(メモリ容量、OS、ビット数)
  • 再現する際、メモリ容量、OS、ビット数を合わせる。PCに入っている他アプリケーションが悪さしている可能性がある。
  • Windowsアップデートのパッチ当て状況でも変わる
  • パッチを抜いたら改善したこともある
  • 最新のアップデートが当たっているPCかどうかも注目
  • DELLのあるソフトが起動していることが原因でメモリリークしていることもあった
  • 再現しないと調査できない
  • メモリ使用量で計測する。開発PCで再現しないのはスペックがいいだけの可能性あり
  • タスクマネージャー見ながら、メモリ容量が減らず、積もっていくことがあればメモリリーク。
  • 32bitマシン(32ビットCPUを採用したコンピュータ)とかであれば、アプリケーションに与えられるメモリ容量が4GBとかしかない
  • ネイティブDLLの使用があれば疑う
  • Microsoft推奨メモリ使用量診断ツールを使用する

再現したら

  • どこでリークしているかを突き止める
  • コードのバイナリーで探索
    • コードを半分消す
    • 再現しなくなったら消した側に問題あり
    • 再現し続けていたらさらに半分消す
  • たいてい原因はどこかの1行

場所が分かったら

  • Dispose漏れ?
  • 画面遷移のやり方で改善する?
  • イベントが登録されたままで画面を閉じている
  • 外部接触部分
  • サードパーティー
  • 大胆にツールを使わないバージョンで作ってみる
  • ミニマムにする
    • Prismを使わないようにしてみる
    • DBと接触しないようにしてみる
    • ファイルとアクセスしないようにしてみる
0
0
2

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
0
0