DBHelper SqlSugar EntityFramework 增刪改查 性能對比測驗
- 測驗資料庫是MySQL資料庫,庫版本:EntityFramework 6、SqlSugar 5.0.3.2、DBHelper 2022-01-17
- 下面的測驗添加和修改都開啟了事務
- 下面的測驗DBHelper的增刪改查都是引數化的,SqlSugar應該也是引數化的,EF我的用法不知道是不是引數化的
原始碼
https://gitee.com/s0611163/DBHelper (原始碼中的PerformanceTest工程)
https://gitee.com/s0611163/SqlSugarDemo
https://gitee.com/s0611163/EFDemo
測驗結果
回圈添加修改
差距不大,耗時都在一個數量級

批量添加修改
SqlSugar性能最好

查詢
EF性能最好

分頁查詢
SqlSugar和EF性能差不多,DBHelper性能稍差

測驗結果分析
現象
- 回圈添加修改 DBHelper和SqlSugar 性能差不多
- 批量添加 SqlSugar比DBHelper 大約快3倍
- 批量修改 SqlSugar比DBHelper 大約快4倍
- 查詢 SqlSugar比DBHelper 大約快90%
- 分頁查詢 SqlSugar比DBHelper 大約快30%
分析
- SqlSugar比DBHelper性能好
- 批量添加性能好的原因:使用了BulkCopy
- 批量修改性能好的原因:使用了update inner join批量更新
- 查詢性能好的原因:DBHelper通過反射實作,SqlSugar使用了Emit技術
關于DBHelper
- 不支持Lambda運算式、鏈式呼叫等語法糖
- 想把它改造成ORM來著,周末在家研究了一天運算式樹,寫了個Demo級別的決議,然后看了FreeSql和SqlSugar運算式樹相關的原始碼,感覺難度有點大,而且代碼量不小,就放棄了
- 個人感覺FreeSql運算式樹相關的代碼結構沒有SqlSugar好,CommonExpression.cs(FreeSql/FreeSql/Internal/CommonExpression.cs)里有1800多行代碼,這么長這么復雜的代碼感覺容易出BUG,SqlSugar運算式樹這一塊分了很多檔案,每個檔案代碼不算太多
- 想用C# Emit技術提升性能來著,Emit代碼有點難寫,也放棄了
- DBHelper沒有使用SqlBulkCopy,插入性能不好,update使用的是多條update陳述句的方式,SqlSugar用的是update inner join方式,FreeSql好像用的是update case when的方式,這兩款ORM性能update比較好
本人EF、SqlSugar、FreeSql都是初學,平時沒用過,Demo如果寫的有問題,歡迎指出
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/413683.html
標籤:.NET技术
上一篇:DBHelper SqlSugar EntityFramework 增刪改查 性能對比測驗
下一篇:如何將Matlab腳本轉換為函式
