绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
.NET 6 EFCore WebApi 使用 JMeter 进行吞吐量测试
2022-09-20 16:37:35

开发环境

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慢不丢人。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

.NET中大型研发必备
创建时间:2022-04-09 00:21:16
本系列文章适合有初/.NET知识的同学阅读(请在电脑上打开页面,获取更好的阅读效果)。 (1)本系列文章,旨在讲述研发一个中大型项目所需要了解的一系列“基本构件”,并提供这些“基本构件”在全网的【简单】、【快速】使用方法!!(并不深究技术原理) (2)通过阅读本系列文章,能让你在“正规”项目研发方面快速入门+进阶,并能达成“小团队构建大网站”的目的。 (3)本系列文章采用的技术,已成功应用到人工智能、产业互联网、社区电商、游戏、金融风控、智慧医疗、等项目上。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 红色侦察兵
    栈主

小栈成员

查看更多
  • miemieMIA
  • LCR_
  • xsy028
  • ?时光与海?
戳我,来吐槽~