侧边栏壁纸
博主头像
怪客のBlog 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
C#

C# 使用BenchmarkDotNet测试代码性能

怪客
2022-04-07 / 0 评论 / 0 点赞 / 400 阅读 / 0 字

安装NuGet包

Install-Package BenchmarkDotNet 

注意:项目的启动方式要设置成Release,直接运行不调试

基本测试

编写测试方法

编写两个方法,用 += 和 StringBuilder 分别测试字符串拼接性能

    public class TestClass
    {
        [Benchmark]//标注此特性代表参与性能测试
        public void TestString()
        {
            string str = string.Empty;
            for (int i = 0; i < 1000; i++)
            {
                str += i;
            }
        }
        [Benchmark]
        public void TestStringBuilder()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 1000; i++)
            {
                sb.Append(i);
            }
            string str = sb.ToString();
        }
    }

调用测试

            var summary = BenchmarkRunner.Run<TestClass>(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator));

测试结果

image-1660897551737

内存分配测试和性能排序

修改测试类

[MemoryDiagnoser] 特性:测试内存分配,GC
[RankColumn]特性:性能排序
image-1660897776882

测试结果

image-1660897745739

测试结果说明

参数 说明
Mean 所有测量值的算术平均值
Error 99.9%置信区间的一半
StdDev 所有测量的标准偏差
Median 将所有测量结果的上半部分分开的值(第50个百分位数)
Rank 当前基准均值在所有基准中的相对位置(阿拉伯风格)
Gen 0 GC第0代每1000次操作收集一次
Gen 1 GC第1代每1000次操作收集一次
Gen 2 GC第2代每1000次操作收集一次
Allocated 每个单个操作的分配内存(仅受管理的(包括),1KB = 1024B)

单位"us"是"μs"或微秒的缩写,1000微秒等于1毫秒。

0

评论区