- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我的 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()
广泛适用于字符串。
附言。大致来说,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);
}
最佳答案
我是MemoryDiagnoser
的作者,我还在我的blog 上提供了您问题的答案。 .我将在这里复制过去:
| Method | Gen 0 | Allocated |
|----------- |------- |---------- |
| A | - | 0 B |
| B | 1 | 496 B |
Gen X
列包含每 1 000 操作的 Gen X
集合数。如果该值等于 1,则表示 GC 在 X
代中每千次基准调用收集一次内存。 BenchmarkDotNet 在运行基准测试时使用了一些启发式方法,因此不同运行的调用次数可能不同。缩放使结果具有可比性。-
表示未执行垃圾回收。Gen X
列不存在,则意味着没有为 X
代执行垃圾回收。如果您的基准测试均未引发 GC,则 Gen 列不存在。阅读结果时请记住:
new byte[7]
数组,它将分配 byte[8]
数组。关于c# - 如何解释 BenchmarkDotNet 和 dotMemory 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52223682/
介绍 今天介绍一个非常强大的基于.Net 的基准测试工具 BenchmarkDotNet 。 BenchmarkDotNet 已经被14300多个项目采用,包括非常多的知名开源项
我正在尝试运行此代码: public class Parsing { private const string Url ="blabla"; private static HttpCl
我已经用一个简单的测试类试用了 BenchmarkDotNet public class BenchTest { bool First = false; [Benchmark]
我有史以来第一次关注 BenchmarkDotNet 和一般基准测试。由于我们工作笔记本电脑上的防病毒限制,我似乎无法使用普通的 BenchmarkRunner 运行基准测试,因此我尝试使用 InPr
我正在对一些 .net 框架的东西进行基准测试,我正在使用 .net 框架、C# 和 BenchmarkDotNet 我想做的是;我正在编写大量基准测试,我只对报告的摘要部分感兴趣。如何配置 Benc
我正在编写我过去用 native 代码编写的程序的 F# 端口。我用了BenchmarkDotNet来衡量其性能。我还在应用程序的输出目录中放置了一个 native EXE。 我将我的 native
我正在使用 BenchmarkDotNet用于性能检查的库,我想注入(inject) 使用基准类时的参数。像这样的东西: public class Program { public stati
我在我的项目(web api,VS2019)和 XUnit 2.4.1 中使用 .NET Core 3.1。最近我正在考虑添加一些性能测试,我遇到了这个库 - BenchmarkDotNet .由于我
因此,我的 Main() 方法中有以下代码 for (int x = 0; x (); for (int j = 0; j < 1250; j++) dict.Add(j, $
我想创建一个基准测试来显示已初始化和未初始化的 .net 列表之间的性能差异,但我遇到了一些麻烦。我尝试了不同的方法来编写这个基准测试,但没有成功。每次运行代码时,我都会得到以下信息: System.
我正在测试基准库以衡量代码的性能。我正在阅读文档。 我不知道如何打印出基准测试结果。我有一个名为 user 的类,我想标记以下方法。 [Benchmark] public bool FollowerA
我正在尝试使用参数对方法进行基准测试。 [Benchmark] public void ViewPlan(int x) { //code here } 在使用 [Benchmark] 注释执行代码时,
我正在尝试使用参数对方法进行基准测试。 [Benchmark] public void ViewPlan(int x) { //code here } 在使用 [Benchmark] 注释执行代码时,
当为我的项目中的方法运行 BenchmarkDotNet 时,我在屏幕上打印了一些“错误的程序集绑定(bind)重定向”警告/错误消息。这让我有点困惑,因为我认为程序集绑定(bind)重定向是一个 .
第一张图片中使用的内存工具来自 Rider。据我所知,它显示了对托管堆的分配。第二张图片显示了 BenchmarkDotNet 的结果。 为什么 Rider 显示已进行分配,但 BenchmarkDo
我正在尝试将 BenchmarkDotNet 包安装到 Visual Studio 2012 ultimate 上一个全新的空白控制台项目中,但我收到此错误日志: PM> Install-Packag
我是一名优秀的程序员,十分优秀!