2009-07-26 6 views
4

.NETアプリケーション内でマネージヒープにアクセスすることは可能ですか?そこに現在割り当てられているオブジェクトを列挙しますか?.NETアプリケーションからマネージヒープの内容をプログラムで表示できますか?

私はそれを可能にするさまざまなツールがあることを知っていますが、私は自動テストでそれを使用できるように、私はむしろコードからこれを自分で行いたいと思います。フォーム。

+0

あなたの解決策は何でも、投稿してください。間違いなく他の人にも役立つでしょう。 – JoshJordan

答えて

2

http://sourceforge.net/projects/profilesharp/には、ソースコードが入手可能なプロファイラがあります。

+0

残念ながらリンクは死んでいる/消えています... – Cohen

+1

リンクを修正しました。これはSourceForgeリポジトリにあります。 –

+0

Unforunately:SourceForgeリポジトリのコミットが0です。 – Cohen

1

あなたは、この情報を表示するには、CLRプロファイラを使用することができます。

http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

+1

私は知っているが、それは私が必要とするものではない。私は自分のC#アプリケーションでこれをやりたいのですが、いくつかの外部対話型ツールではできません。ですから、基本的には、CLR Profilerのしくみ(自分のやり方)を知りたいのです。 – Timo

1

唯一の方法は、プロファイラを使ってほかに、WinDbgをとし、ロードされたSOSの拡張子です。

IIRC、あなたは!EEHeapを呼び出します。

+0

さて、これらのプロファイラーがすべてそれを行うことができれば、そこには道があるはずです...私はプロファイラーがこれをどのようにしているかを知りたいです:-) – Timo

+1

.NETプロファイリングAPIを見てください。 – leppie

1

Profiler(Profiling APIを使用)は、CLRによってロードされ、管理されたメソッドのenter/leave/tail呼び出しで呼び出されるさまざまなオプションがあるという意味で、コード(と他のものもたくさんあります)。それらはアンマネージコードで書かれています。

AFAIKこの情報をCLRを監視するプロファイラ/デバッガを呼び出さずに内部的に取得する方法はありません。 また、コードの実行が終了した後(多くのDispose()コール、ファイナライズなど)になってからだけ、この種の情報が得られるとは限りません。

1

今度はClrMD Nugetパッケージを使用できます。

Nugetパッケージは実際にはMicrosoft.Diagnostics.Runtimeと呼ばれます。ヒープ内のオブジェクトや、CLRランタイムのその他のプロパティを表示することができます。

関連する問題