喜闻乐见之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

发布后运行结果更准确

运行输入序号即开始测试

posted @ 2023-11-21 10:04  hubro  阅读(54)  评论(0编辑  收藏  举报