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

开发环境

VS2022+.NET 6

测试环境

测试工具

接口压力测试工具:JMeter

数据库

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

测试设置

200 个线程并发,每个线程循环 50 次,共 10000 次请求。.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

接口代码

模糊查询、排序、分页查询第 10 页 200 条数据,参数化查询条件。.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

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

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

吞吐量

只有 200 多.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

每个请求响应时间

最长 5 秒多.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

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

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

吞吐量

1200 多.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

每个请求响应时间

不到 50 毫秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

线程占用

最大达到 143 个线程.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

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

吞吐量

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

每次请求响应时间

100 毫秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

线程占用

只有 50 多个线程.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

使用 FactoryStartNew. StartNewThread

查询代码

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

FactoryStartNew. StartNewThread 代码

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

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

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

吞吐量

不到 200.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

每个请求响应时间

最长 33 秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

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

吞吐量

1000 多.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

每个请求响应时间

200 毫秒以内.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

线程占用

高达 260 多个线程.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

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

吞吐量

只有 200 多

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

每个请求响应时间

最长达到了 30 秒
在等待创建线程,.NET 默认线程池,1 秒才增加一个线程.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

线程占用

高达 230 多个线程.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

对比 SqlSugar

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

吞吐量

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

每个请求响应时间

500 毫秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

对比 FreeSql

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

吞吐量

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

每个请求响应时间

不到 500 毫秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

对比 Dapper.LiteSql

吞吐量

480 多.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

每个请求响应时间

400 多毫秒.NET 6 EFCore WebAPI 使用 JMeter 进行吞吐量测试

结论

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

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

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

4、比 EFCore 慢不丢人。

5、不要说代码怎么写的,我要看测试结果。

测试工程地址

https://gitee.com/s0611163/Net6WebApiPerformanceTest


转自: cnblogs.com/s0611163/p/16711330.html

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...