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

 事由:

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

顺带提一下:

啊啊啊啊 等我仔细看文档的时候文档 发现它让我用Release的模式去运行benchmark。 emmm...其实我之前一直在用Debug模式调试。。

所以各位在运行的时候,The best way is build our benchmark in the Release mode and run it from the command line.

过程:

首先 我们需要在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<UserImpelement>();
      //var summary = BenchmarkRunner.Run(typeof(UserImpelement))//当然也可以这么写 Console.WriteLine(
"-----------------"); Console.WriteLine(summary); Console.ReadKey(); }
复制代码

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

 

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

GitHub上有回复

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

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

运行的summary改成

复制代码
var summary = BenchmarkRunner.Run<UserImpelement>(new AllowNonOptimized());
复制代码

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

可以看到运行大概花费了1分52秒

总结果如下

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

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信