首页 > 其他分享 >喜闻乐见之ORM基本性能测试

喜闻乐见之ORM基本性能测试

时间:2023-11-21 10:11:24浏览次数:31  
标签:KB 测试 TestCondition 喜闻乐见 ORM ms TestQueryLoop var ns

本次测试只测试以下几点

  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();
                }
            }
        }

测试结果(仅供参考)

具体测试代码参见下文源码

结果1

MethodProvideTypeMeanErrorStdDevMedianGen0Gen1Allocated
TestResult myTest 746.7 μs 15.26 μs 44.52 μs 730.7 μs 21.4844 - 68.67 KB
TestResult ChloeTest 1,818.3 μs 41.93 μs 123.64 μs 1,797.1 μs 31.2500 - 98.62 KB
TestResult DapperTest 536.5 μs 11.61 μs 34.04 μs 528.5 μs 16.6016 - 52.66 KB
TestResult EfSqlliteTest 623.3 μs 12.41 μs 30.21 μs 617.9 μs 33.2031 - 103.05 KB
TestResult FastFrameworkTest 2,756.5 μs 29.31 μs 25.98 μs 2,754.0 μs 121.0938 - 377.39 KB
TestResult FreeSqlTest 2,367.3 μs 47.29 μs 107.71 μs 2,341.8 μs 66.4063 11.7188 210.1 KB
TestResult SqlSugarTest 1,742.2 μs 121.07 μs 339.49 μs 1,655.3 μs 46.8750 - 147.29 KB

 结果2

MethodProvideTypeMeanErrorStdDevMedianGen0Gen1Allocated
TestCondition myTest 14,131.69 ns 282.276 ns 782.187 ns 13,958.35 ns 1.7548 0.4272 5537 B
TestCondition ChloeTest 595,894.06 ns 14,617.505 ns 43,100.044 ns 598,357.47 ns 9.7656 - 31965 B
TestCondition DapperTest 63.32 ns 1.607 ns 4.738 ns 63.46 ns 0.0280 - 88 B
TestCondition EfSqlliteTest 166,956.69 ns 3,217.466 ns 9,283.124 ns 164,359.72 ns 17.8223 - 55989 B
TestCondition FastFrameworkTest 616,365.41 ns 12,669.876 ns 37,158.552 ns 617,112.30 ns 8.7891 - 30053 B
TestCondition FreeSqlTest 1,058,620.61 ns 10,821.173 ns 10,122.132 ns 1,060,617.77 ns 5.8594 1.9531 46019 B
TestCondition SqlSugarTest 186,503.97 ns 1,451.859 ns 1,212.368 ns 186,146.95 ns 21.7285 - 68511 B

 结果3

MethodProvideTypeMeanErrorStdDevMedianGen0Gen1Allocated
TestQueryLoop myTest 2.112 ms 0.0306 ms 0.0239 ms 2.118 ms 42.9688 - 149.8 KB
TestQueryLoop ChloeTest 29.754 ms 0.7137 ms 2.0707 ms 29.819 ms 250.0000 - 782.76 KB
TestQueryLoop DapperTest 1.532 ms 0.0308 ms 0.0908 ms 1.538 ms 17.5781 - 53.94 KB
TestQueryLoop EfSqlliteTest 5.885 ms 0.1144 ms 0.2463 ms 5.795 ms 375.0000 - 1155.08 KB
TestQueryLoop FastFrameworkTest 59.503 ms 0.6741 ms 0.5976 ms 59.539 ms 3000.0000 - 9259.67 KB
TestQueryLoop FreeSqlTest 29.067 ms 0.5529 ms 0.6790 ms 29.158 ms 125.0000 62.5000 873.88 KB
TestQueryLoop SqlSugarTest 4.315 ms 0.0369 ms 0.0346 ms 4.315 ms 203.1250 - 644.42 KB

 

测试代码下载 https://files.cnblogs.com/files/hubro/dbTest.rar?t=1700470723&download=true

发布后运行结果更准确

运行输入序号即开始测试

标签:KB,测试,TestCondition,喜闻乐见,ORM,ms,TestQueryLoop,var,ns
From: https://www.cnblogs.com/hubro/p/17844362.html

相关文章

  • winform中,在一个textbook输入编号,按回车键该编号所指的其他数据在另外的textbook中显
    代码:1、链接数据库SqlDataAdapterda;DataTabledt;privatestaticreadonlystringSQL=ConfigurationManager.AppSettings["connectionstring"]; 2、在需要搜索编号的textbook中找到KeyDown属性,双击,代码如下stringaa=textBox1.Text.Trim();stringstr="selectcont......
  • element-form动态切换会触发rules校验问题
      增加key属性......
  • 什么是软件测试领域的灰盒测试
    灰盒测试(GreyBoxTesting)是一种软件测试方法,它结合了黑盒测试和白盒测试的特性。在黑盒测试中,测试人员并不关注程序的内部结构或代码,他们只关注输入和输出的关系;而在白盒测试中,测试人员会深入到程序的内部结构和代码。灰盒测试则介于两者之间,测试人员会了解部分程序的内部结构和......
  • Angular 依赖注入系统里 Injection token PLATFORM_ID 的使用场景
    Angular的依赖注入系统是它的核心特性之一,它使得我们可以轻松地在应用程序的各个部分共享和管理代码。在Angular的依赖注入系统中,InjectionToken是一个特别重要的概念。InjectionToken是一个用于参数类型的标记类,它可以用来在依赖注入器中注入特定的值。在这里,我们将重点讨论......
  • 《Unix/Linux系统编程》测试 (2)
    13.14server回答代码中有哪些宏,都在哪定义的有三个宏定义,分别是:MAX:定义为256SERVER_HOST:定义为"localhost"SERVER_PORT:定义为1234这些宏定义出现在代码的开头,在包含标准库头文件之后。这些宏定义用于给常量赋值,并在后续代码中使用这些常量client回答代码中有哪些宏......
  • SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用
    SQLNULL值什么是NULL值?NULL值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为NULL值。需要注意的是,NULL值与零值或包含空格的字段不同。具有NULL值的字段是在记录创建期间留空的字段。如何测试NUL......
  • django orm中如何创建表关系
    表与表之间的关系 一对多 多对多 一对一 没有关系判断表关系的方法:换位思考"""图书表出版社表作者表作者详情表"""图书和出版社是一对多的关系外键字段建在多的那一方book图书和作者是多对多的关系需要创建第三张表来专门存储作者与作者详情表是一对一"""fromdjang......
  • SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用
    SQLNULL值什么是NULL值?NULL值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为NULL值。需要注意的是,NULL值与零值或包含空格的字段不同。具有NULL值的字段是在记录创建期间留空的字段。如何测试NU......
  • django orm对象关系映射
    orm不会帮你创建库只能创建到表的层面需要你自己提前创建好库"""#对象关系映射表 类记录 对象数据 对象属性/方法"""能够让一个不会sql语句的python程序员也能够简单快捷的操作数据库,极大的提升开发效率"""#去应用下的models.py中书写模型类 #类 模型类#表 模......
  • 如何使用Fiddler进行弱网测试
    测试APP、web经常需要用到弱网测试,也就是在信号差、网络慢的情况下进行测试。我们自己平常在使用手机APP时,在地铁、电梯、车库等场景经常会遇到会话中断、超时等情况,这种就属于弱网。普通的弱网测试可以选择第三方工具对带宽、丢包、延时等模拟弱网环境。这里带大家一起解锁Fidd......