「メモリリーク」の分析 質問する

「メモリリーク」の分析 質問する

.NET の観点から:

  • 何ですかメモリーリーク?
  • アプリケーションがリークしているかどうかをどのように判断できますか? どのような影響がありますか?
  • メモリリークを防ぐにはどうすればよいでしょうか?
  • アプリケーションにメモリ リークがある場合、プロセスが終了したり強制終了されたりするとメモリ リークは解消されますか? または、アプリケーションのメモリ リークは、プロセスが完了した後でもシステム上の他のプロセスに影響しますか?
  • COM Interop や P/Invoke 経由でアクセスされるアンマネージ コードについてはどうでしょうか?

ベストアンサー1

私が見た中で最も良い説明は、無料の第7章にありますプログラミングの基礎電子書籍

基本的に、。ネット参照されたオブジェクトがルート化され、ガベージ コレクションできない場合、メモリ リークが発生します。これは、意図したスコープを超えて参照を保持した場合に誤って発生します。

OutOfMemoryExceptions が発生し始めたり、メモリ使用量が予想以上に増加したりしたら、メモリリークが発生していることがわかります (パフォーマンスモニター優れたメモリ カウンターを備えています。

理解。ネットのメモリモデルを理解することが、これを回避する最善の方法です。具体的には、ガベージコレクターの動作と参照の動作を理解することです。これについては、電子書籍の第7章を参照してください。また、よくある落とし穴にも注意してください。おそらく最も一般的なのはイベントです。オブジェクトオブジェクトのイベントに登録されますB、そして反対するオブジェクトがB消える理由はB参照を保持する解決方法は、完了したらイベントを登録解除することです。

もちろん、優れたメモリプロファイルがあれば、オブジェクトグラフを表示し、オブジェクトのネスト/参照を調べて、参照がどこから来ているのか、どのルートオブジェクトが責任を負っているのかを確認できます(アカハナアリのプロフィール、JetBrains dotMemory、メモリプロファイラー非常に良い選択ですが、テキストのみを使用することもできますウインドウズそしてSOSただし、あなたが本当の達人でない限り、商用/ビジュアル製品を強くお勧めします。

共有参照がガベージ コレクターによって管理されることを除けば、アンマネージ コードは典型的なメモリ リークの影響を受けると私は考えています。この最後の点については間違っている可能性があります。

おすすめ記事