本次測試只測試以下幾點
- Expression表達式解析,生成SQL的效率
- 數據轉實體的效率
- 多次查詢效率
測試環境
- 數據庫Sqlite
- net6.0
- 測試框架Benchmark
以EF爲例
只調用SQL語句生成
public override void testQueryCondition() { using (var context = new efContext()) { var filter = GetSelectFilter(); var query = context.Set<TestEntity>().AsQueryable(); var sql = query.Where(filter).ToQueryString(); } }
直接返回對象或匿名對象
public override void testQueryResult() { using (var context = new efContext()) { var query = context.Set<TestEntity>().AsQueryable(); var list = query.Take(listTake).Select(b => new { b.Id, b.F_Float, b.F_Bool, b.F_DateTime, b.F_Decimal, b.F_Double, b.F_Int64 }).ToList(); } }
循環多次調用
public override void testQueryLoop() { for (var i = 0; i < 20; i++) { using (var context = new efContext()) { var query = context.Set<TestEntity>().AsQueryable(); var list = query.Where(b => b.Id == i).ToList(); } } }
測試結果(僅供參考)
mean列是運行用時,allocated是內存分配,可以看到差別很大
具體測試代碼參見下文源碼
結果1
結果2
結果3
測試代碼下載 https://files.cnblogs.com/files/hubro/dbTest.rar?t=1700470723&download=true
發佈後運行結果更準確
運行輸入序號即開始測試