.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