1

同じ .net 3.5 アプリケーションの 2 つのバージョンの前後比較をしようとすると、使用するツールによっては一貫性のない結果が得られます。

typeperf - これは信頼できると思いますが、次のように述べています。

  • v1: 244MB / 260MB (プライベート バイト / ワーキング セット)
  • v2: 281MB / 296MB

Process Explorerでは、パフォーマンス グラフに次の数値が表示されます。

  • v1: 283MB (プライベート バイト)
  • v2: 262MB

そのため、typeperf は v2 がより多くのメモリを消費したと言っていますが、Process Explorer は反対のことを主張しています。

これらはすべて別々の測定値であり、異なる実行ですが、数値は驚くほど確実に再現可能です。

前述の 2 つのツールに加えて、 Process Explorer から完全なメモリ ダンプを取得し、ファイル サイズのみを確認しました (WinDbg を実行したり、その他の方法で分析したりする時間がありませんでした)。

  • v1: 484MB (完全なダンプ ファイル サイズ)
  • v2: 480MB

また、アプリを.net Memory Profilerから実行すると、ネイティブ メモリ、.net メモリ、および合計メモリの両方が、v1 よりも v2 の方が低くなります。

したがって、それは世界の他の地域に対して typeperf であるようです (WinDbg 分析はまだ未解決です)。

誰が正しいのか、どうすればわかりますか?

4

1 に答える 1

1

問題が何であるかはよくわかります。私のテストでは、GC に仕事をするのに十分な時間を与えませんでした

  • v1はガベージを作成し、それへの参照を保持していたため (-> メモリ リーク)、クリーンアップするものは何もありませんでした
  • しかし、v2はガベージを作成し、参照を解放しました。

完全なダンプを取得するとき、またはメモリ プロファイラーを使用するときに、GC が実行されます (後者の場合は事実としてわかっていますが、前者の場合は、ダンプ時にプライベート バイトが大幅に減少することに基づいて推測しています)。

それは私にとってそれを説明しています。

于 2012-08-08T12:11:45.913 に答える