喜聞樂見之ORM基本性能測試

本次測試只測試以下幾點

  1. Expression表達式解析,生成SQL的效率
  2. 數據轉實體的效率
  3. 多次查詢效率

測試環境

  1. 數據庫Sqlite
  2. net6.0
  3. 測試框架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

發佈後運行結果更準確

運行輸入序號即開始測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章