首页 > 其他分享 >.NET 6 EFCore WebApi 使用 JMeter 进行吞吐量测试

.NET 6 EFCore WebApi 使用 JMeter 进行吞吐量测试

时间:2022-09-20 16:33:04浏览次数:72  
标签:WebApi EFCore 吞吐量 线程 测试 NET JMeter 请求

.NET 6 EFCore WebApi 使用 JMeter 进行吞吐量测试

开发环境

VS2022
.NET 6

测试环境

测试工具

接口压力测试工具:JMeter

数据库

MySQL 5.7
数据库和WebApi服务在同一台服务器上,JMeter在本人笔记本上。

测试设置

200个线程并发,每个线程循环50次,共10000次请求。

接口代码

模糊查询、排序、分页查询第10页200条数据,参数化查询条件。

EFCore (第一轮请求),测试结果

服务程序部署到测试服务器上测试,连接MySql数据库。

吞吐量

只有200多

每个请求响应时间

最长5秒多

EFCore (第一轮请求结束后,20秒内进行第二轮请求),测试结果

服务程序部署到测试服务器上测试,连接MySql数据库。
经过第一轮10000个请求的充分预热,取第二轮10000个请求的测试结果。

吞吐量

1200多

每个请求响应时间

不到50毫秒

线程占用

最大达到143个线程

EFCore (第一轮请求结束后,20秒后进行第二轮请求),测试结果

吞吐量

1200

每次请求响应时间

100毫秒

线程占用

只有50多个线程

使用FactoryStartNew. StartNewThread

查询代码

FactoryStartNew. StartNewThread代码


使用FactoryStartNew. StartNewThread (第一轮请求),测试结果

服务程序部署到测试服务器上测试,连接MySql数据库。

吞吐量

不到200

每个请求响应时间

最长33秒

使用FactoryStartNew. StartNewThread (第一轮请求结束后,20秒内进行第二轮请求),测试结果

吞吐量

1000多

每个请求响应时间

200毫秒以内

线程占用

高达260多个线程

使用FactoryStartNew. StartNewThread (第一轮并发请求结束后,20秒后进行第二轮请求),测试结果

吞吐量

只有200多

每个请求响应时间

最长达到了30秒
在等待创建线程,.NET默认线程池,1秒才增加一个线程

线程占用

高达230多个线程

对比SqlSugar

同样的数据库,同样的数据,同样的查询,同样的JMeter测试设置,同样取第二轮测试结果。

吞吐量

395

每个请求响应时间

500毫秒

对比FreeSql

同样的数据库,同样的数据,同样的查询,同样的JMeter测试设置,同样取第二轮测试结果。

吞吐量

408

每个请求响应时间

不到500毫秒

对比Dapper.LiteSql

吞吐量

480多

每个请求响应时间

400多毫秒

结论

1. EFCore优秀,吞吐量和响应时间都非常优秀。

2. 使用FactoryStartNew. StartNewThread,能用,但有问题。

3. 如果觉得自己的ORM没问题,那就没有问题了,谁没事闲的做这种测试,慢一点不会死人,用户多了并发多了就加机器,作者和用户永远也不会知道,明明可以达到1000的吞吐量,却一直用的280吞吐量的ORM。

4. 比EFCore慢不丢人。

标签:WebApi,EFCore,吞吐量,线程,测试,NET,JMeter,请求
From: https://www.cnblogs.com/s0611163/p/16711330.html

相关文章

  • DropoutNet: Addressing Cold Start in Recommender Systems阅读笔记
    动机本文是2017年nips上的一篇论文。在当时对于冷启动问题,大部分工作是针对colditem的,或是将偏好和内容都结合在目标函数中使其非常复杂。本文作者提出了DropoutNet,这个......
  • .net 前端传值给后端有几种方法
    .net前端传值给后端有几种方法常用的一.html的标签form表单传值二.jquery的Ajax提交(可以用js里面的Ajax)$.ajax({url:"/index",//后端地址......
  • Net5 控制台程序读取配置文件的几种方式
    十年河东,十年河西,莫欺少年穷学无止境,精益求精本篇提供几种读取配置文件的方式,从简到难,步步加深1、新建控制台程序1.1、新增一个名称为application.json的配置文件appl......
  • .NET6发布程序报错发布遇到错误。生成失败。检查输出窗口了解更多详细信息。
    发布报错详情:发布遇到错误。生成失败。检查输出窗口了解更多详细信息。已将诊断日志写入以下位置:“C:\Users\USER\AppData\Local\Temp\tmpD5F7.tmp”。解决方案:在项目......
  • .Net6 IPv6使用
          表示方法IPv6的长分布式结构图IPv6的长分布式结构图IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。I......
  • AspNetUsers锁定用户
    SetLockoutEnabledAsync SetLockoutEndDateAsync控制台显示警告:数据库未被更改Lockoutisnotenabledforthisuser.AspNetUsers表中字段LockoutEnabled表示“是否......
  • .netcore发布后错误排查
    1、.dll不能运行,iis没有显示错误,可能是发布后是生产环境,该为开发环境,修改web.config<aspNetCoreprocessPath="dotnet"arguments=".\CoreCms.Wrl.Web.dll"stdoutLogEna......
  • .net Ioc 详解
    一、概念1.1什么是IOC?Ioc—InversionofControl,即 控制反转,其是一种 设计思想,而不是一种技术。在没有使用IOC之前,我们一般是通过new来实例化,从而创建一个对象。但是......
  • A Graph Convolutional Network with Adaptive Graph Generation and Channel Selecti
    motivation图神经网络已经被证明可以很好的解决长距离的语义依赖。但是之前的方法大多使用固定的图,如依赖于外部解析器生成的图(句法依存图等)图是固定的无法使用梯度......
  • pod内部java.net.UnknownHostException
    周日中午接应用电话,反馈有个应用异常,查看pod日志中,出现以下的报警java.net.UnknownHostException:channel-ndc-imp查看channel-ndc-imp服务,是正常的。尝试登录某个pod,n......