3

メモリ使用量に関連する VS 2015 の診断ツールで使用しようとしている次の簡単なプログラムがあります。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Begin");
        Console.ReadLine();
        Goo();
        Console.WriteLine("End");
        Console.ReadLine();
    }

    private static void Goo()
    {
        var list = new List<string>();
        for (var i = 0; i < 1000; i++)
        {
            Foo(list);
        }
    }

    private static void Foo(IEnumerable<string> strings)
    {
        foreach (var str in strings)
        {

        }
    }
}

このアプリケーションのプロジェクトのプロファイリング中に、いくつかのスナップショットを撮り、1000ボックス化されList<string>+Enumeratorたオブジェクトが表示されることを期待していました。たとえば、JetBrains のdotMemory製品ではこのような情報を取得します。しかし、何らかの理由で、VSのツールでこの情報を見ることができません...明らかに何かが欠けています...誰かが私を正しい方向に向けることができますか?

ここに画像の説明を入力

上記のスナップショットでmscorlibわかるように、実行中のプログラムに関する情報が表示されない場合にのみ、モジュールに関する情報を取得します。何が欠けていますか?...以下の詳細情報:

  • Start Diagnostic Tools Without Debuggingビジュアルスタジオで使用しました
  • スナップショットを撮って開いた後、オプションの選択を解除しCollapse small objectsて、これが情報を隠しているかどうかを確認しましたが、それも役に立ちませんでした.

更新 (ユーザーの回答に応答) : dotMemory バージョン 4.4 を使用しています。以下は、私が取得したデータのスナップショットです。注:メッセージが表示Collect Allocationsされたら、キーを押す前に必ずボタンをクリックしてください。Begin

ここに画像の説明を入力

4

2 に答える 2

2

"End" ポイントでスナップショットを取得すると、Goo と Foo で作成されたすべてのオブジェクトが既に収集されます。このコードを dotMemory 10.0.1 でプロファイリングしましたが、Goo および Foo メソッドで作成されたオブジェクトも表示されません。

更新: dotMemory では、「メモリ トラフィック」ビューを見ています。メモリ トラフィック- 作成されたオブジェクトであり、その時点までにすでに収集されている可能性があります。dotMemory は、収集されたオブジェクトを表示できないという警告を表示します。プロファイリング設定ダイアログで「割り当てデータの収集をすぐに開始する」チェックボックスをオンにすると、dotMemory は、これらの 1000 個のオブジェクトが割り当てられ、既に収集されていることを示します。VS 診断ツールでは、ライブオブジェクト グラフを見ています。私はこのツールにあまり詳しくありませんが、メモリ トラフィックに関する情報はないようです。

dotMemory ( 「すべてのオブジェクト」ビュー) でライブ オブジェクト グラフを見ると、これらのオブジェクトも見つかりません。

于 2015-11-23T18:24:27.897 に答える