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

事由:

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

顺带提一下:

640?wx_fmt=png

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

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

过程:

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

640?wx_fmt=jpeg

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

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

其中一个是

 640?wx_fmt=png

第二个

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

640?wx_fmt=png

 

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

GitHub上有回复

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

640?wx_fmt=png

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

运行的summary改成

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

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

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

640?wx_fmt=png

总结果如下

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

640?wx_fmt=png

// * 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(加载头像信息)

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

640?wx_fmt=png

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

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

ok进行第二组测试

640?wx_fmt=png

第三组

640?wx_fmt=png

第四组

640?wx_fmt=png

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

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF280C-Game on Tree【数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/CF280C 题目大意 nnn个点的一棵树&#xff0c;每次选择一个没有染色的点把它和它的子树染黑&#xff0c;求期望全部染黑的步数。 解题思路 可以理解为我们按照一个顺序轮流染色&#xff0c;如果一个点有祖先节点在它前面就不…

糊涂的教授(2015特长生 T3)

题目大意 平面上有n个矩阵&#xff0c;和n个数字&#xff0c;对于每个矩阵选择矩阵内的一个数字作为编号&#xff0c;让你给出唯一方案&#xff0c;使每个数字只作为一个矩阵的编号&#xff08;多种方案即为不可行的&#xff09; 解题思路 因为多种方案是不可行的&#xff0c…

MATLAB线性规划相关函数用法

一.线性规划的Matlab标准形式及软件求解 1. MATLAB中规定线性规划的标准形式为 其中c和 x为n 维列向量&#xff0c; A、 Aeq 为适当维数的矩阵&#xff0c;b 、beq为适当维数的列向量。 &#xff08;Aeq 对应约束条件中等式约束的系数矩阵&#xff0c;A为约不等式约束的系数矩…

势能线段树(均摊分析)

势能线段树 线段树能够通过打懒标记实现区间修改的条件有两个&#xff1a; 能够快速处理懒标记对区间询问结果的影响能够快速实现懒标记的合并 但有的区间修改不满足上面两个条件&#xff08;如区间整除/开方/取模等&#xff09;。 但某些修改存在一些奇妙的性质&#xff0c…

.NET Core 出得云端入得本地,微软让跨平台应用勇敢表达

地铁公交的上班路上、咖啡馆里等人的时候&#xff0c;这些碎片化时间都是现代人学习和充电的机会&#xff0c;根据第42次CNNIC中国互联网发展状况统计报告&#xff0c;截至2018年6月&#xff0c;网络文学用户规模已达4.06亿&#xff0c;占网民总体50.6%&#xff1b;手机网络文学…

【每日一题】7月3日精讲—毒瘤xor

【每日一题】7月3日精讲—毒瘤xor 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K Special Judge, 64bit IO Format: %lld文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 输入描述: 第一行一个整…

【DP】集合问题(2015特长生 T4/luogu 1466)

正题 luogu 1466 题目大意 给你1~n的一个集合&#xff0c;问你有多少种方案把该集合分成两个集合&#xff0c;且两集合的数字之和相等 解题思路 设fi,jf_{i,j}fi,j​为放好i个数且集合1的和比集合2的和大j的方案书 那么对于第i个放到两个集合中&#xff0c;分别从fi−1,j−…

P5212-SubString【LCT,SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P5212 题目大意 开始一个字符串SSS&#xff0c;有nnn次操作 在SSS末尾加入一个字符串询问一个串在SSS中出现了多少次 强制在线 解题思路 强制在线的话&#xff0c;只有SAM\text{SAM}SAM能够支持动态插字符了&#xff0c;但…

了解改良圈算法

一.相关知识——Hamilton圈 什么是Hamilton圈&#xff1f; 哈密顿图&#xff08;哈密尔顿图&#xff09;&#xff08;英语&#xff1a;Hamiltonian path&#xff0c;或Traceable path&#xff09;是一个无向图&#xff0c;由天文学家哈密顿提出&#xff0c;由指定的起点前往指…

ASP.NET Core Middleware

中间件(Middleware)是ASP.NET Core中的一个重要特性。所谓中间件就是嵌入到应用管道中用于处理请求和响应的一段代码。ASP.NET Core Middleware可以分为两种类型&#xff1a;Conventional MiddlewareIMiddlewareConventional Middleware这种中间件没有实现特定的接口或者继承特…

NOIP复健计划——动态规划

树形DP [POI2011] DYN-Dynamite 二分KKK check(mid)&#xff1a; 能否选出mmm个点&#xff0c;使得 ∀i为关键点&#xff0c;Minjisselected{dis(i,j)}≤mid\forall i为关键点&#xff0c;Min_{j\ is\ selected}\{dis(i,j)\}\leq mid∀i为关键点&#xff0c;Minj is selecte…

【每日一题】7月6日精讲—平衡二叉树

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 平衡二叉树&#xff0c;顾名思义就…

【DP】晨练计划(ybtoj)

正题 ybtoj 题目大意 给你n个时间点 在第i个时间点跑步有aia_iai​点贡献&#xff0c;但会加一点疲惫值&#xff0c;疲惫值不能超过m 当前疲惫值为x&#xff0c;那么你可以花x点时间来清空疲惫值&#xff0c;当然也可以啥都不干 问你第n个时间后疲惫值为0的最大贡献 解题思…

MATLAB灰色预测

一.灰色预测 1.灰色系统下的灰色预测 <1>什么是灰色系统&#xff1f; 所谓的灰色系统其实就是夹杂在白色系统和黑色系统之中的一种系统&#xff0c;而白色系统就是全部信息已知的系统&#xff0c;黑色系统就是全部信息未知的系统。所以&#xff0c;夹在这两种系统中间…

ASP.NET Core 中的依赖注入

什么是依赖注入软件设计原则中有一个依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;为了更好的解耦&#xff0c;讲究要依赖于抽象&#xff0c;不要依赖于具体。而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖注入(DI)。什么是依…

P4357-[CQOI2016]K远点对【K-Dtree】

正题 题目链接:https://www.luogu.com.cn/problem/P4357 题目大意 平面上给出nnn个点&#xff0c;求第kkk远的点对距离。 解题思路 K-Dtree\text{K-Dtree}K-Dtree的模板题&#xff0c;但是这里只有二维&#xff0c;大概是每次根据一个维度把nnn个点分成两半像线段树一样丢到下…

【每日一题】7月7日题目精讲—最短路

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 给一个连通图&#xff0c;每次询问…

【dfs】栅栏的木料(2012特长生 T4)

题目大意 给你n个木板&#xff0c;给你这些木板的长度&#xff0c;你可以把这些木板切开&#xff0c;现在有m个木料&#xff0c;问你最多可以切出多少个木料 解题思路 可以dfs枚举每个木料用哪个木板来切 但这样显然会超时&#xff0c;那么考虑剪枝 1.对于一些木板&#xf…

【c++算法刷题笔记】——洛谷1

2020/2/14-2/16 1. 循环提取一个数的每一位数字 while (d > 0) //d0跳出循环 {xd%10; //x每次为d的个位数 d d / 10; //相当于d每次舍去个位数 }2. cnew创建动态二维数组 int *anew int[n]; //创建动态一维数组 int(* a)[2…

【活动(广州)】office365的开发者训练营

Office 365每月有超过1亿的商业活跃用户&#xff0c;是现有最大的生产力服务。Office 365为开发人员提供了一个令人难以置信的机会&#xff0c;包括业务关键数据和数百万用户&#xff0c;以及一个旨在让人们保持工作流程的平台。作为一名开发人员&#xff0c;您可以使用每天使用…