3

.Netプロジェクト(Windowsサービス)に取り組んでいますが、メモリリークが見つかりました。ANTSメモリプロファイラを使用して、私は判断しました-根本的な原因は管理されていないメモリスコープにあります。ただし、COM /COM+またはp/invoke-pure .Net(DataAcces-Fluent nHibernate、Automapper、WCF)は使用しません。

仮に、理由は何でしょうか?どうすればボトルネックを見つけることができますか..私はそのような種類の問題に直面して解決したあらゆる種類の経験に興味があります

もう少し詳細:

  • 私はオブジェクトがどのように処分されているかを知っています(そしてそれを正しく行います)
  • 私は(ほとんど)イベントを使用しません
  • タイマーを使っています
  • 私はマルチスレッドを使用しています(しかし、それはかなり並列性です)
  • 私のアプリケーションはステートレスではありません-私はオブジェクトのライフサイクル中にオブジェクトを追跡しています
4

1 に答える 1

2

メモリリークについて

一般的に言えば、メモリリークはまだ.netに存在する可能性があります。(並べ替え、これらのすべてが教科書のメモリリークそのものではありません)第2世代のガベージコレクションでスタックしたり、IDisposableから継承したオブジェクトを破棄しない場合や、ストリーム、イベント、SQL接続が開いたままになっている場合など私はこの問題の専門家ではありませんが、あなたの探求に役立つ可能性のあるいくつかの場所を紹介します。

あなたがそれにいる間、ガベージコレクションが機能する方法を成長させることは、この種の努力に大いに役立ちます。ガベージコレクションの基礎のようなものから始めて、舞台裏ですべての.NET魔法で一体何が起こっているのかについての一般的な精神的な絵を見てください。

COMのものについて

.NETに固有のものは、単にcomやwin32ラッパーが舞台裏でPInvokeを呼び出すだけのものです。落ち込んで内部が汚れていることが必要な場合は、コードの漏洩が疑われる逆コンパイラー(IL Spyなど)を確認することをお勧めします。

ラッパーに関連するすべてのものについてのより深い議論については、これをチェックしてください。
.NETはWin32のラッパーですか?

于 2012-05-11T20:49:32.317 に答える