利用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方法中这样写
点击运行,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 同步和异步方法性能相关推荐
- android 数据回传代码,安卓向.net core api传输图片,执行保存到数据库命令后返回400错误代码,用postman测试没有问题安卓程序不行...
安卓向.net core api传输图片,执行保存到数据库命令后返回400错误代码,用postman测试没有问题安卓程序不行,其他api没有问题,在执行保存到数据库命令之前也没有问题.希望各位大佬可以 ...
- mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)
利用MySQL的Binlog实现数据同步与订阅(下)blog.yuanpei.me 终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现, ...
- 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据
跟同事合作前后端分离项目,自己对 WebApi 的很多知识不够全,虽说不必要学全栈,可是也要了解基础知识,才能合理设计接口.API,方便与前端交接. 晚上回到宿舍后,对 WebApi 的知识查漏补缺, ...
- 我的第一个翻译作品 - Acrobat core API中的两章
第2章 理解插件 这一章提供一个总览,插件如何被载入,被初始化,被卸载,以及其它与插件和PDF库应用相关的概念.推荐你在开始开发插件或PDF库应用之前阅读本章节. 第1节 关于插件初始化 这部分描述A ...
- TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录
TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录 目录 训练的数据集部分图片 输出结果 1.默认参数输出结果 训练过程全记录 训练的数据集部分图片 以从网上收集了许多日式动 ...
- TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录
TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成 目录 测试结果 测试过程全记录 测试结果 train_00_0099 train_00_0799 train_00_0899 t ...
- python的api库_python 利用toapi库自动生成api
在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...
- 基于ASP.NET Core api 的服务器事件发送
现如今程序员对Web API的调用已经是轻车熟路.但是传统的api调用都是拉模式,也就是主动发起请求去调用一个api. 但是程序员往往对另一种很有用的模式很陌生,即推模式. 拉模式 - 主动调用并获取 ...
- 使用 Postman 测试你的 API
使用 Postman 测试你的 API Intro 最近想对 API 做一些自动化测试,看了几个工具,最后选择了 postman,感觉 postman 的设计更好一些,我们可以在请求发送之前和请求获取 ...
最新文章
- php 接口的定义与实现,PHP接口定义与用法示例
- Attention Is All You Need (transformer)
- 机器人学习--路径规划算法
- CodeDay 北京站报名倒计时
- 欢乐纪中B组周五模拟赛【2019.3.8】
- 关于绑定了GridView控件后怎么截取字符串和CSS样式来控制表头不换行
- DiskGenius的 “终止位置参数溢出”错误解决方法。
- latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
- Web前端前景、最新技术、学习路线?
- 用js内置对象XMLHttpRequest 来用ajax
- GrADS读取.grb2文件记录
- 伺服电机常用参数设置_伺服电机功能及作用_伺服电机参数设置
- F轮融资3.6亿美元,Keep能撑起20亿美元的估值吗?
- WPF Blend 自定义控件
- Java验证辛钦大数定理
- 开发一个多用户商城系统多少钱
- 日语从0到N2语法(一)判定句+疑问句分类+存在句+形容词
- 首期InnoSpace国际创业集训营举办DemoDay
- 关于Unity LitJson写入数据报错的问题
- Kitty猫基因编码
热门文章
- vim编辑和命令模式、实践
- Javascript中数组去重的六种方法
- mysql导入sql脚本命令
- ASA防火墙16 SSL/×××
- 使用ADO.NET的参数集合来有效防止SQL注入漏洞
- 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
- 2021 年 9 月 TIOBE 指数 C# 同比增长突破 1.2%
- ASP.NET Core官方文档+源码,这样学效率高10倍!
- 趣味图解+源码分析,轻松吃透Linux
- c# 通过内存映射实现文件共享内存