1. 测试数据库是MySQL数据库,库版本:EntityFramework 6、SqlSugar 5.0.3.2、DBHelper 2022-01-17
  2. 下面的测试添加和修改都开启了事务
  3. 下面的测试DBHelper的增删改查都是参数化的,SqlSugar应该也是参数化的,EF我的用法不知道是不是参数化的

源码

https://gitee.com/s0611163/DBHelper (源码中的PerformanceTest工程)

https://gitee.com/s0611163/SqlSugarDemo

https://gitee.com/s0611163/EFDemo

测试结果

循环添加修改

差距不大,耗时都在一个数量级

DBHelper SqlSugar EntityFramework 增删改查 性能对比测试

批量添加修改

SqlSugar性能最好

DBHelper SqlSugar EntityFramework 增删改查 性能对比测试

查询

EF性能最好

DBHelper SqlSugar EntityFramework 增删改查 性能对比测试

分页查询

SqlSugar和EF性能差不多,DBHelper性能稍差

DBHelper SqlSugar EntityFramework 增删改查 性能对比测试

测试结果分析

现象

  1. 循环添加修改 DBHelper和SqlSugar 性能差不多
  2. 批量添加 SqlSugar比DBHelper 大约快3倍
  3. 批量修改 SqlSugar比DBHelper 大约快4倍
  4. 查询 SqlSugar比DBHelper 大约快90%
  5. 分页查询 SqlSugar比DBHelper 大约快30%

分析

  1. SqlSugar比DBHelper性能好
  2. 批量添加性能好的原因:使用了BulkCopy
  3. 批量修改性能好的原因:使用了update inner join批量更新
  4. 查询性能好的原因:DBHelper通过反射实现,SqlSugar使用了Emit技术

关于DBHelper

  1. 不支持Lambda表达式、链式调用等语法糖
  2. 想把它改造成ORM来着,周末在家研究了一天表达式树,写了个Demo级别的解析,然后看了FreeSql和SqlSugar表达式树相关的源码,感觉难度有点大,而且代码量不小,就放弃了
  3. 个人感觉FreeSql表达式树相关的代码结构没有SqlSugar好,CommonExpression.cs(FreeSql/FreeSql/Internal/CommonExpression.cs)里有1800多行代码,这么长这么复杂的代码感觉容易出BUG,SqlSugar表达式树这一块分了很多文件,每个文件代码不算太多
  4. 想用C# Emit技术提升性能来着,Emit代码有点难写,也放弃了
  5. DBHelper没有使用SqlBulkCopy,插入性能不好,update使用的是多条update语句的方式,SqlSugar用的是update inner join方式,FreeSql好像用的是update case when的方式,这两款ORM性能update比较好

本人EF、SqlSugar、FreeSql都是初学,平时没用过,Demo如果写的有问题,欢迎指出

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
  • 2021-09-30
猜你喜欢
  • 2021-04-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
相关资源
相似解决方案