【发布时间】:2019-02-12 20:59:46
【问题描述】:
所以,我的 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();
}
}
在dotMemory 下运行Main() 大约 6 分钟后,我收到以下结果
应用程序从10Mb 开始,一直到14Mb。
但是当我运行 BenchmarkDotnet 测试时,我得到了这个
我看到我已经分配了2.6GB。什么?似乎一点都不好。另外,我看不到 Gen1 和 Gen2 列。这是否意味着代码没有在其中分配任何内容,因此没有任何内容可显示?
如何解释结果?在DotMemory 中似乎完全正常,但在BenchmarkDotNet 中则不行。我是BenchmarkDotnet 的新手,对于有关结果的任何信息都会有所帮助。
附言。 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);
}
【问题讨论】:
-
@mjwills 我已经添加了被测方法的粗略实现。
标签: c# .net benchmarking dotmemory benchmarkdotnet