2012-03-27 3 views
0

2つのxmlドキュメントを比較し、XmlDocument/XDocumentと比較してXmlReaderがどのようなデータサイズで大きなサイズの利点を生み出すのか把握したい。代替実装のメモリフットプリントを比較する

私の単純なテストコンソールを実行するだけで、ツールでプロファイリングしながら2つの異なるインプリメンテーション(XmlDocument、XmlReaderをベースにしたもの)を使って2つのXMLファイルの内容を比較することができます。

私は、CLRのパフォーマンスアーキテクトの無料ツールであるCLR Profiler 4を使ってみましたが、まったく情報がまったくありませんでした。それから私はANTS Profilerの試用版をダウンロードしましたが、これも私に何も与えませんでした!

私のテストファイルのATMは非常に小さく、プログラムは両方のファイルをブレークして終了します。これが重要であれば、コンソールとして実装されます。私はANTSから「表示する結果がありません」とCLR Profilerから「0 bytes allocated」を得た理由を推測することはできません。両方とも私には「ライブ」結果が表示されるようですが、コードを実行して、その後起こった。

私はこれを理解する簡単な方法はありますか?たぶんGCや関連するタイプが可能になる機能を公開していますか?私は主に使用されている総メモリに関心がありますが、大きなオブジェクト(> 80KB、したがって「デフラグ可能」ではない)が作成されているかどうかを確認することも重要です。

-

定型はご遠慮くださいレスポンス「のXmlReaderがフラットフットプリントを持っている」「のXmlReader小さいです」か。私はこれを知っています。しかし、私は利益の大きさを確立し、実際にそれらの間で選択するためにはどんなデータサイズで重要になるのかを確認する必要があります。 XmlReaderが「ある時点で」「かなり小さく」なることを知っているだけでは不十分です。

+0

まず、あなたがプログラムを正しく使用していることを確認してください。メモリプロファイラは通常、スナップショットを取る必要があります。それはあなたが見るためのすべての情報を集める時です。 –

答えて

1

メモリプロファイラーでは、興味深いイベントの前後に2つのスナップショットを取ってから、それらを比較してメモリ使用量とリークを確認します。したがって、解析する前と後で(ただしすべてのリソースを解放する前に)あなたのアプリにConsole.Read()を追加し、それらの時点でスナップショットを取って比較することができます。しかし、メモリ使用量を確認する必要がある場合は、タスクマネージャまたはプロセスエクスプローラでそれを行うことができると思います。

サンプル:すべての enter image description here

+0

タスクマネージャー/プロセスエクスプローラーは、メモリー使用量についての野球の考えを与えるかもしれませんが、厳密に言えば、管理されていないメモリーの使用方法についてしか言いません。私は、CLRがどのようにメモリを管理しているかについてはあまりよく分かりませんが、メモリを管理することはわかっています。たとえば、小さな管理メモリ割り当てを実行するのに必要なよりも多くのネイティブメモリを割り当てます。同様に、管理対象メモリが解放されるたびに直接的にメモリを解放するのではなく、独自のアイデアに従ってメモリを解放する可能性があります。しかし、最も重要なことに、そのような「プロファイリング」は、WHYのものがどんな形であるかについての洞察を与えるのに十分に詳細に近いところにありません。 –

+0

私はタスクマネージャについて同意しますが、現代のプロセスエクスプローラはclrの処理とメモリ使用に関する多くの情報を示しています。私の答えに追加したスクリーンショットを見てください。 – Nikolay

関連する問題