none
マネージコード.NET Framework4でのメモリリーク プロファイル RRS feed

  • 質問

  • マネージコード, .NET Framework4でのメモリリークのプロファイル方法について質問です。

    現在私は、C#を使用してVisual Studioのアドオンを開発しており、メモリリークが発生しております。メモリリークは、パフォーマンスツールにより、メモリの動向を調査し、マネージヒープとスレッドのスタックにてメモリリークを起こしているだろうとわかりました。

    しかし、スタックの原因となっている個所が特定できずに悩んでいます。Visual Studio 2010、.NET Framework4に対応したCLR Profilerのようなツールは無いでしょうかね?もしくは、皆さんが今回のようなメモリリークの問題に遭遇した場合はどうされていますか?

    よろしくお願いします。

    2010年9月2日 13:30

回答

  • CLR Profiler for .NET Framework 2.0 を 4.0 に対しても動くようにするトリックがあるらしいです。環境変数を追加するだけのようです。次のスレッドで語られていたので、リンクしておきます。

    Any Tools Available to find Memory leaks?

    と思ったら、ドキュメントがありました。ここです。

    プロファイラーの互換性の設定

    とてもわかりづらい文章ですが、要は環境変数 COMPLUS_ProfAPI_ProfilerCompatibilitySetting に EnableV2Profiler をセットしておけば、CLR 4.0 で CLR Profiler for .NET Framework 2.0 を使えるようになるらしいです。


    Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう
    • 回答としてマーク I.TMK 2010年9月6日 2:43
    2010年9月3日 1:24

すべての返信

  • 現時点では CLR Profiler for .NET Framework 4.0 はリリースされていないようです。

    代わりのツールとしては VMMap をとりあえず使っています。.NET Framework に特化したものではないのですが、それなりに役に立つと思います。


    Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう
    2010年9月2日 20:03
  • VMMapを使用してみましたが、Managed HeapやStackなど各メモリの状況が可視化されてわかるので見やすいです。しかし、各メモリのアドレス空間に割り当てられているメモリ アドレスを把握できるまでで、オブジェクトの種類などが把握しきれ無い状態です。アドレスを頼りに、Visual Studioのメモリ ウィンドウやウォッチ ウィンドウを参照してみましたが、原因の分析には届きませんでした。

    やはり、マネージコードのメモリリークの原因まで調査するのは難しいのでしょうか?

    2010年9月3日 0:51
  • CLR Profiler for .NET Framework 2.0 を 4.0 に対しても動くようにするトリックがあるらしいです。環境変数を追加するだけのようです。次のスレッドで語られていたので、リンクしておきます。

    Any Tools Available to find Memory leaks?

    と思ったら、ドキュメントがありました。ここです。

    プロファイラーの互換性の設定

    とてもわかりづらい文章ですが、要は環境変数 COMPLUS_ProfAPI_ProfilerCompatibilitySetting に EnableV2Profiler をセットしておけば、CLR 4.0 で CLR Profiler for .NET Framework 2.0 を使えるようになるらしいです。


    Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう
    • 回答としてマーク I.TMK 2010年9月6日 2:43
    2010年9月3日 1:24
  • さっそくCLR Profilerを使ってみました。

    CLR Profilerは、

    ・環境変数を2項目設定

    ・リブートする

    ・CLR Profilerを管理者権限で起動

    のみで対応できました。(後から参照した際のメモとして残します。)

     

    しかし、私が作っているVSのアドオンを対象としてプロファイリングすると、プロファイル途中でOutOfMemoryを起こしてしまいました。プロファイリングを行うとプロセスのメモリ確保量が10倍以上に増えていました。CLR Profilerの情報を得られたのに、残念です。

    2010年9月3日 6:39