喜闻乐见之ORM基本性能测试
本次测试只测试以下几点
- 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
发布后运行结果更准确
运行输入序号即开始测试