利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能

2021-07-10 08:06

阅读:584

标签:测试   展现   analysis   iss   stat   总结   处理   comm   变化   

事由:

这两天mentor给我布置了个任务让我用BenchmarkDotNet工具去测试一下同一个API 用同步和异步方法写性能上有什么差别。

过程:

首先 我们需要在Nuget上安装BenchMarkDotNet

技术分享图片

(安装当前最新版本,当前我已经安装好了)

但是却安装失败出现两个error

其中一个是

 技术分享图片

第二个

技术分享图片

ok,第二个错误非常显眼,那我先尝试着按照它的说法解决  我边在Nuget上找到 Microsoft.CodeAnalysis.CSharp 2.8.2 ,Microsoft.CodeAnalysis.Common (= 2.8.2)  我安装的都是2.8.2的版本 但是其实这两个包都有更新的版本。安装完毕后 发现错误消失了,却跳出几个警告。(对后面的测试没有影响就先不搭理)

安装完,上述两个包后 再回去安装 BenchmarkDotNet 终于安装成功了。

Ok此时我们在新建一个Console.App ,命名为BenchMarkDotNetTest

技术分享图片

API层把需要的方法 前加上[Benchmark] 引用BenchmarkDotNet.Attributes;

技术分享图片

注意:原来的方法中是有参数的,但是这里不允许有参数,我就把方法的入参和值直接写到方法里面去了。

2个方法都在UserImpelement 类中所以我们在Main方法中这样写

 static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run();
            Console.WriteLine("-----------------");
            Console.WriteLine(summary);
            Console.ReadKey();
        }

点击运行,emmm,错误又来了

技术分享图片

 

在百度上搜索了,但是为找到结果,于是就去Bing上搜索

GitHub上有回复

https://github.com/dotnet/BenchmarkDotNet/issues/579

技术分享图片

Ok 根据该大佬的解决方案 我们新创建了AllowNonOptimazed

运行的summary改成

var summary = BenchmarkRunner.Run(new AllowNonOptimized());

再次运行,运行开始。 运行需要一点时间

可以看到运行大概花费了152

技术分享图片

总结果如下

技术分享图片

我运行了多次每一次的数据都有变化,响应速度上也是有时CheckLogin快 有时AsyncCheckLogin更快些

 我们还能在BenchMarkDotNetTest\bin\Debug\netcoreapp2.1\BenchmarkDotNet.Artifacts\results中看到输出结果的XLS MDHTML文件

技术分享图片

当前截图是我运行了2次的结果所以有两张EXL表格

点开HTML文件可以看到也是一样就是本次性能测试的Summary

技术分享图片

而打开表格的时候则会有更多详细的性能数据显示

技术分享图片

可是我对这些性能指标很陌生,至少我们初步的看一下他们代表什么有什么意义

技术分享图片

技术分享图片

// * Legends *

  Mean   : Arithmetic mean of all measurements

  Error  : Half of 99.9% confidence interval

  StdDev : Standard deviation of all measurements

  1 ms   : 1 Millisecond (0.001 sec)

 

Mean: 可以反映响应时长

StdDev:事务处理响应的偏差,值越大,偏差越大;

Median:中值响应时间

confidence interval:置信区间 (展现这个参数的真实值有一定概率落在测量结果的周围的程度)

补充: 话说,我同样的情况下运行4次,只有1次出现了中值 其他三次都没有

从每一次的运行测试结果上看也是五五开- - 我想会不会是当前接口逻辑太简单了呢所以很难得出结果,那ok我们再来多测试几个接口

(这次我换了另一个.Net Core API项目)

那我们对三组方法进行测试(同样的方法内容用同步和异步处理)

分别为

login(登录)

ReturnClient(返回管理员用户信息)

loadImg(加载头像信息)

按照同样的步骤进行操作,运行

技术分享图片

这个项目进行测试这一次测试耗时非常的快(39秒)

上述结果而言 其实同步的响应时间通常快于异步(当然其实我不是特别确信我的判断)

ok进行第二组测试

技术分享图片

第三组

技术分享图片

第四组

技术分享图片

emmm...果然还是有波动的。

所以我测试了很多组数据,但是想去比较个究竟,却感觉自己似乎进入了误区了。

我现在刚刚大四,技术不是非常好,还是希望各位大牛提提意见。

这些性能指标具体代表些什么,又如何去反应代码的性能优劣呢?

还有我这样去比较同步和异步的方法性能是否正确呢 ,为什么我看不出个所以然呢?

 

利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能

标签:测试   展现   analysis   iss   stat   总结   处理   comm   变化   

原文地址:https://www.cnblogs.com/RikuBlog/p/9686876.html


评论


亲,登录后才可以留言!