8

したがって、Main()メソッドには次のコードがあります

for (int x = 0; x < 100; x++) // to mimic BenchmarkDotnet runs
   for (int y = 0; y < 10000; y++)
     LogicUnderTest();

次に、テスト中の次のクラスがあります

[MemoryDiagnoser, ShortRunJob]
public class TestBenchmark
{
    [Benchmark]
    public void Test_1()
    {
        for (int i = 0; i < 10000; i++)
            LogicUnderTest();
    }
}

約6分間実行Main()した後、次の結果を受け取りますdotMemory

ここに画像の説明を入力

アプリは で始まり、10Mbまで続き14Mbます。

しかし、BenchmarkDotnetテストを実行すると、これが得られます ここに画像の説明を入力

2.6GB割り当てられていることがわかります。何?それはまったく良くないようです。Gen1また、Gen2列が見えません。コードが何も割り当てなかったので、何も表示されないということですか?

結果をどのように解釈できますか? では問題ないように見えますがDotMemory、 では問題ありませんBenchmarkDotNet。私はかなり新しいBenchmarkDotnetので、結果に関する情報に役立ちます。

PS。LogicUnderTest()文字列で広範囲に機能します。

PSS。大まかに、LogicUnderTestこのように実装されています

void LogicUnderTest()
{
    var dict = new Dictionary<int, string>();
    for (int j = 0; j < 1250; j++)
        dict.Add(j, $"index_{j}");
    string.Join(",", dict.Values);
}
4

3 に答える 3