开发环境
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多毫秒