sqlsugar freesql hisql 三个ORM框架性能测试对比


hisql与目前比较流行的ORM框架性能测试对比

测试环境

数据库sqlserver 配置如下

总体测试结果

插入记录数hisql(耗时)sqlsugar(耗时)freesql(耗时)
5条0.0107秒0.0312秒0.02675秒
10条0.0111秒0.0307秒0.0271秒
50条0.0174秒0.0364秒0.0430秒
100条0.0281秒0.0472秒0.0922秒
200条0.0310秒0.0584秒0.2319秒
500条0.0712秒0.1127秒0.5996秒
1000条0.1112秒0.1871秒0.8145秒
10000条1.0440秒1.6415秒5.3671秒
100000条10.3279秒15.8685秒46.0261秒

分析

  1. 5条数据时 HiSql比SqlSugar快2.91倍 比freesql快2.5倍,从数据可以看得出在这个数据档位sqlsugar表现是慢的 freesql比sqlsugar快14%

  2. 10条数量测试三个ORM的线性变化值不大 依然是hisql最快 freesql次之,sqlsugar相对比freesql慢一点

  3. 50条数据时 hisql比sqlsugar快2.09倍 比freesql快2.47倍 ,此时sqlsugar比freesql快18%,可以看出freesql在数量增长时他的性能也是呈下滑趋势

  4. 100条数据时 hisql比sqlsugar快1.67倍 比freesql快3.28倍,sqlsugar比freesql快1.95倍,sqlsugar与Hisql差距慢慢在缩小,但freesql与其它两个orm框架相比差距越来越大

  5. 当数据达到100000条时 hisql依然比sqlsugar保持在绝对性的优势

从测试结果来看 HiSql的性能测试名列前茅 sqlsugar次之 freesql表现最差

hisql.net 官网(文档编写中)

HiSql查询语句教程

HiSql 源码(github) https://github.com/tansar/HiSql

git clone https://github.com/tansar/HiSql.git

当前测试源代码(github) https://github.com/tansar/HiSqlTestDemo

git clone https://github.com/tansar/HiSqlTestDemo.git

测试源代码

using System;
using System.Collections.Generic;
using System.Diagnostics;
using HiSql;
using SqlSugar;

namespace TestProject
{
    class Program
    {
        static void Main(string[] args)
        {
            

            //hisql连接 请先配置好数据库连接
            HiSqlClient sqlClient = Demo_Init.GetSqlClient();
            //hisql需要初始货安装 只需要执行一次
            sqlClient.CodeFirst.InstallHisql();


            //freesql连接
            IFreeSql freeClient = Demo_Init.GetFreeSqlClient();
            
            //sqlsugar连接
            SqlSugarClient sugarClient = Demo_Init.GetSugarClient();

            int _count = 100000;

            sqlClient.CodeFirst.CreateTable(typeof(Table.HTest01));

            Console.WriteLine("初始化hisql专用表成功!");

            sqlClient.CodeFirst.CreateTable(typeof(Table.HTest02));
           
            
            Console.WriteLine("初始化sqlsugar专用表成功!");

 
            sqlClient.CodeFirst.CreateTable(typeof(Table.HTest03));
            Console.WriteLine("初始化freesql专用表成功!");


            Console.WriteLine($"测试场景  向表中插入{_count}条数据,都用各个ORM常用的插入试(不用bulkcopy因为这个方法是底层库提供的)");
            Console.WriteLine($"用常规数据插入最适应日常应用场景");

            

           
            List<object> lstobj = new List<object>();
            List<Table.HTest02> lstobj2 = new List<Table.HTest02>();
            List<Table.HTest03> lstobj3 = new List<Table.HTest03>();
            Random random = new Random();

            //插入的参数值都随机产生 以免数据库执行相同SQL时会有缓存影响测试结果
            for (int i = 0; i < _count; i++)
            {
                //hisql可以用实体类也可以用匿名类
                lstobj.Add( new { SID=(i+1), UName=$"hisql{i}",Age=20+( i % 50), Salary=5000+(i%2000)+ random.Next(10), Descript=$"hisql初始创建" });
                
                //sqlsugar用匿句类报错用实体类
                lstobj2.Add(new Table.HTest02 { SID = (i + 1), UName = $"sqlsugar{i}", Age = 20 + (i % 50), Salary = 5000 + (i % 2000) + random.Next(10), Descript = $"sqlsugar初始创建" });
                lstobj3.Add(new Table.HTest03 { SID = (i + 1), UName = $"freesql{i}", Age = 20 + (i % 50), Salary = 5000 + (i % 2000) + random.Next(10), Descript = $"freesql初始创建" });
            }

            //删除测试表中的数据
            sqlClient.TrunCate("HTest01").ExecCommand();
            sqlClient.TrunCate("HTest02").ExecCommand();
            sqlClient.TrunCate("HTest03").ExecCommand();

            Stopwatch sw = new Stopwatch();

            #region freesql
            sw.Reset();
            Console.WriteLine("------------------------------");
            Console.WriteLine("----------FreeSql 测试----------");
            Console.WriteLine($"FreeSql 预热...{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            var temp3 = freeClient.Queryable<Table.HTest03>().Where(w => w.Age < 0).ToList();
            Console.WriteLine($"FreeSql  正在插入数据\t{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            sw.Start();
            freeClient.Insert<Table.HTest03>(lstobj3).ExecuteAffrows();
            sw.Stop();
            Console.WriteLine($"FreeSql 数据插入{_count}条 耗时{sw.Elapsed}秒");
            sw.Reset();
            #endregion


            #region sqlsugar
            sw.Reset();
            Console.WriteLine("------------------------------");
            Console.WriteLine("----------SqlSugar 测试----------");
            Console.WriteLine($"SqlSugar 预热...{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            var temp2 = sugarClient.Queryable<Table.HTest02>("HTest02").Where(w => w.Age < 1).ToList();
            Console.WriteLine($"sqlsugar  正在插入数据\t{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            sw.Start();
            sugarClient.Insertable(lstobj2).AS("HTest02").ExecuteCommand();
            sw.Stop();
            Console.WriteLine($"sqlsugar 数据插入{_count}条 耗时{sw.Elapsed}秒");
            sw.Reset();
            #endregion




            #region hisql
            sw.Reset();
            Console.WriteLine("------------------------------");
            Console.WriteLine("----------HiSql 测试----------");
            Console.WriteLine($"HiSql 预热...{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            var temp1 = sqlClient.Query("HTest01").Field("*").Take(1).Skip(1).ToDynamic();
            Console.WriteLine($"HiSql  正在插入数据\t{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
            sw.Start();
            sqlClient.Insert("HTest01", lstobj).ExecCommand();
            sw.Stop();
            Console.WriteLine($"hisql 数据插入{_count}条 耗时{sw.Elapsed}秒");
            sw.Reset();
            #endregion


            var s = Console.ReadLine();
        }
    }
}

hisql sqlsugar freesql 插入5条数据测试

hisql sqlsugar freesql 插入10条数据测试

hisql sqlsugar freesql 插入50条数据测试

hisql sqlsugar freesql 插入100条数据测试

hisql sqlsugar freesql 插入200条数据测试

hisql sqlsugar freesql 插入500条数据测试

hisql sqlsugar freesql 插入1000条数据测试

hisql sqlsugar freesql 插入10000条数据测试

hisql sqlsugar freesql 插入100000条数据测试

后续请关注bulkcopy的性能测试对比

文章来源:https://www.cnblogs.com/tansar/p/15774492.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:Redis OM .NET Redis对象映射框架
下一篇:使用.NET 6开发TodoList应用(21)——实现API版本控制
评论列表

发表评论

评论内容
昵称:
关联文章

sqlsugar freesql hisql ORM框架性能测试对比
DBHelper SqlSugar EntityFramework 增删改查 性能对比测试
SqlSugar 5.0官方文档 .NET ORM
Linq和Lambda 性能对比
话说C#程序员人手一ORM
.NET SAAS 架构与设计 -SqlSugar ORM
C#性能优化总结
显卡测试测试GPU渲染性能 网站地址
.NET 通用多条件动态参数查询方法 - SqlSugar ORM
iNeuOS工业互联网操作系统,发布3.6.4版本:云端安全控制和实时日志功能,附Chrome、Firefox和Edge浏览器测试性能对比
dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架
C#使用Thrift作为RPC框架入门()之层架构
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
SqlSugar Image字段BUG
YESWin Winform开发框架 代码生成器使用
C# ASP.NET Core开发学生信息管理系统(
Python数组List检索 种方法从数组List中检索出符合要求的元素
C# 多线程入门系列(
YESWEB开发框架 技术要求
JocPlanTask 测试并运行任务

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码