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


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

  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

测试结果

循环添加修改

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

批量添加修改

SqlSugar性能最好

查询

EF性能最好

分页查询

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

测试结果分析

现象

  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如果写的有问题,欢迎指出

文章来源:https://www.cnblogs.com/s0611163/p/15814051.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:记一次 .NET 某药品仓储管理系统 卡死分析
下一篇:WPF 使用 Silk.NET 进行 DirectX 渲染入门
评论列表

发表评论

评论内容
昵称:
关联文章

DBHelper SqlSugar EntityFramework 增删 性能对比测试
sqlsugar freesql hisql 三个ORM框架性能测试对比
Elasticsearch使用系列-ES增删基本操作+ik分词
Linq和Lambda 性能对比
显卡测试测试GPU渲染性能 网站地址
SqlSugar 5.0官方文档 .NET ORM
iNeuOS工业互联网操作系统,发布3.6.4版本:云端安全控制和实时日志功能,附Chrome、Firefox和Edge浏览器测试性能对比
C#性能优化总结
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
.NET SAAS 架构与设计 -SqlSugar ORM
SqlSugar Image字段BUG
话说C#程序员人手一个ORM
也谈string.Join和StringBuilder的性能比较
测试文档-wupanfeng
EntityFramework Linq 查询数据获得树形结构
EF EntityFramework.MappingAPI批量导入 模型属性顺序和数据库表不一致时导入错位
JocPlanTask 测试并运行任务
EntityFramework Linq 获得所有数据,包括子节点
dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架
.NET 通用多条件动态参数查询方法 - SqlSugar ORM

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码