事由:

这两天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方法中这样写

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

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

GitHub上有回复

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

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

运行的summary改成

var summary = BenchmarkRunner.Run<UserImpelement>(new AllowNonOptimized());

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

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

总结果如下

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

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

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

点开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次出现了中值 其他三次都没有。

后来发现其实在类前加上 [MinColumn, MaxColumn, MedianColumn]

返回结果里就会多输出Min, Max, Media。

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

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

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

分别为

login(登录)

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

loadImg(加载头像信息)

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

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

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

ok进行第二组测试

第三组

第四组

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

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

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

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

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

补充:

BenchmarkDotNet官方文档 https://benchmarkdotnet.org/articles/guides/getting-started.html

相关文章:

  • .NET Core中的性能测试工具BenchmarkDotnet

  • 使用 BenchmarkDotnet 测试代码性能

  • .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono

  • 用BenchmarkDotNet给C#程序做性能测试

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

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

  1. android 数据回传代码,安卓向.net core api传输图片,执行保存到数据库命令后返回400错误代码,用postman测试没有问题安卓程序不行...

    安卓向.net core api传输图片,执行保存到数据库命令后返回400错误代码,用postman测试没有问题安卓程序不行,其他api没有问题,在执行保存到数据库命令之前也没有问题.希望各位大佬可以 ...

  2. mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)

    利用MySQL的Binlog实现数据同步与订阅(下)​blog.yuanpei.me 终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现, ...

  3. 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据

    跟同事合作前后端分离项目,自己对 WebApi 的很多知识不够全,虽说不必要学全栈,可是也要了解基础知识,才能合理设计接口.API,方便与前端交接. 晚上回到宿舍后,对 WebApi 的知识查漏补缺, ...

  4. 我的第一个翻译作品 - Acrobat core API中的两章

    第2章 理解插件 这一章提供一个总览,插件如何被载入,被初始化,被卸载,以及其它与插件和PDF库应用相关的概念.推荐你在开始开发插件或PDF库应用之前阅读本章节. 第1节 关于插件初始化 这部分描述A ...

  5. TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录

    TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录 目录 训练的数据集部分图片 输出结果 1.默认参数输出结果 训练过程全记录 训练的数据集部分图片 以从网上收集了许多日式动 ...

  6. TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录

    TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成 目录 测试结果 测试过程全记录 测试结果 train_00_0099 train_00_0799 train_00_0899 t ...

  7. python的api库_python 利用toapi库自动生成api

    在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...

  8. 基于ASP.NET Core api 的服务器事件发送

    现如今程序员对Web API的调用已经是轻车熟路.但是传统的api调用都是拉模式,也就是主动发起请求去调用一个api. 但是程序员往往对另一种很有用的模式很陌生,即推模式. 拉模式 - 主动调用并获取 ...

  9. 使用 Postman 测试你的 API

    使用 Postman 测试你的 API Intro 最近想对 API 做一些自动化测试,看了几个工具,最后选择了 postman,感觉 postman 的设计更好一些,我们可以在请求发送之前和请求获取 ...

最新文章

  1. php 接口的定义与实现,PHP接口定义与用法示例
  2. Attention Is All You Need (transformer)
  3. 机器人学习--路径规划算法
  4. CodeDay 北京站报名倒计时
  5. 欢乐纪中B组周五模拟赛【2019.3.8】
  6. 关于绑定了GridView控件后怎么截取字符串和CSS样式来控制表头不换行
  7. DiskGenius的 “终止位置参数溢出”错误解决方法。
  8. latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
  9. Web前端前景、最新技术、学习路线?
  10. 用js内置对象XMLHttpRequest 来用ajax
  11. GrADS读取.grb2文件记录
  12. 伺服电机常用参数设置_伺服电机功能及作用_伺服电机参数设置
  13. F轮融资3.6亿美元,Keep能撑起20亿美元的估值吗?
  14. WPF Blend 自定义控件
  15. Java验证辛钦大数定理
  16. 开发一个多用户商城系统多少钱
  17. 日语从0到N2语法(一)判定句+疑问句分类+存在句+形容词
  18. 首期InnoSpace国际创业集训营举办DemoDay
  19. 关于Unity LitJson写入数据报错的问题
  20. Kitty猫基因编码

热门文章

  1. vim编辑和命令模式、实践
  2. Javascript中数组去重的六种方法
  3. mysql导入sql脚本命令
  4. ASA防火墙16 SSL/×××
  5. 使用ADO.NET的参数集合来有效防止SQL注入漏洞
  6. 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
  7. 2021 年 9 月 TIOBE 指数 C# 同比增长突破 1.2%
  8. ASP.NET Core官方文档+源码,这样学效率高10倍!
  9. 趣味图解+源码分析,轻松吃透Linux
  10. c# 通过内存映射实现文件共享内存