ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说。

闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究。

参赛ORM

1、SqlSugar:是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法,地址:http://www.cnblogs.com/sunkaixuan/p/5654695.html

2、Chloe ORM: 模仿EF代码风格与设计的一款轻量级高性能ORM ,地址:http://www.cnblogs.com/so9527/

3、Dapper ORM : 是一个轻型的ORM类。代码就一个SqlMapper.cs文件,主要是IDbConnection的扩展方法,官方站点http://code.google.com/p/dapper-dot-net/ ,也可以通过Nuget进行安装

4、EF6.0: .NET官方ORM

测试结果:

从测试代码可以看出 SqlSugar Dapper Chloe的性能都是差不多的,EF就有些不尽人意

将EF改成AsNoTracking又测了几次,【查询所有】性能有所提升但是还是最慢, 查询单条和分页AsNoTracking貌似没什么效果

测试代码切片

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using SyntacticSugar;
using Dapper;
using System.Data.SqlClient;
using System;
using Chloe.SqlServer;

namespace ORMTest
{
    /// <summary>
    /// 查询所有
    /// </summary>
    public class SelectAll
    {
        public static void Execute(int count,string title) {

            Console.WriteLine(title);
            PerHelper.Execute(count, " SqlSugar Queryable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    var list = db.Queryable<Student>().ToList();

                }
            });

            PerHelper.Execute(count, " SqlSugar Sqlable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    var list = db.Sqlable().From<Student>("t").SelectToList<Student>("*");

                }
            });

            PerHelper.Execute(count, " SqlSugar SqlQuery ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    var list = db.SqlQuery<Student>("select * from Student");

                }
            });

            PerHelper.Execute(count, " Chloe ORM Query", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    var list = context.Query<Student>().ToList();
                }
            });

            PerHelper.Execute(count, " Chloe ORM  SqlQuery", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    var list = context.SqlQuery<Student>("select * from Student").ToList();
                }
            });

            PerHelper.Execute(count, " EF6.0 ", () =>
            {
                using (SchoolContext sc = new SchoolContext())
                {
                    var list = sc.Students.AsNoTracking().ToList();
                }
            });

            PerHelper.Execute(count, " Dapper Sql ", () =>
            {
                using (SqlConnection conn = new SqlConnection(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    var list = conn.Query<Student>("select * from Student").ToList(); ;
                }
            });

            Console.WriteLine("");
        }
    }
}

查询所有

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using SyntacticSugar;
using Dapper;
using System.Data.SqlClient;
using System;
using Chloe.SqlServer;
using Chloe;

namespace ORMTest
{
    /// <summary>
    /// 查询分页
    /// </summary>
    public class SelectPage
    {
        public static void Execute(int count,string title) {

            Console.WriteLine(title);
            PerHelper.Execute(count, " SqlSugar Queryable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    ,);

                }
            });

            PerHelper.Execute(count, " SqlSugar Sqlable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    ,);

                }
            });

            PerHelper.Execute(count, " SqlSugar SqlQuery ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    ,e=});

                }
            });

            PerHelper.Execute(count, " Chloe ORM Queryable ", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    ).Take().ToList();
                }
            });

            PerHelper.Execute(count, " Chloe ORM  SqlQuery", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    var list = context.SqlQuery<Student>("select * from(select *,row_number() over(order by id) as r from Student  ) t where t.r between @b and @e", new DbParam[] {
                        DbParam.Create("),
                        DbParam.Create(")
                    }).ToList();
                }
            });

            PerHelper.Execute(count, " EF6.0 ", () =>
            {
                using (SchoolContext sc = new SchoolContext())
                {
                    ).Take().AsNoTracking().ToList();
                }
            });

            PerHelper.Execute(count, " Dapper Sql ", () =>
            {
                using (SqlConnection conn = new SqlConnection(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    , e =  }).ToList(); ;
                }
            });

            Console.WriteLine("");
        }
    }
}

查询分页

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using SyntacticSugar;
using Dapper;
using System.Data.SqlClient;
using System;
using Chloe.SqlServer;
using Chloe;

namespace ORMTest
{
    /// <summary>
    /// 查询单条
    /// </summary>
    public class SelectSingle
    {
        public static void Execute(int count,string title) {

            Console.WriteLine(title);
            PerHelper.Execute(count, " SqlSugar Queryable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    ).ToList();

                }
            });

            PerHelper.Execute(count, " SqlSugar Sqlable ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                     });

                }
            });

            PerHelper.Execute(count, " SqlSugar SqlQuery ", () =>
            {
                using (SqlSugarClient db = new SqlSugarClient(ConfigSugar.GetConfigString("SchoolContext")))
                {

                    });

                }
            });

            PerHelper.Execute(count, " Chloe ORM  Queryable", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    ).ToList();
                }
            });

            PerHelper.Execute(count, " Chloe ORM  SqlQuery", () =>
            {
                using (MsSqlContext context = new MsSqlContext(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    ")).ToList();
                }
            });

            PerHelper.Execute(count, " EF6.0 ", () =>
            {
                using (SchoolContext sc = new SchoolContext())
                {
                    ).AsNoTracking().ToList();
                }
            });

            PerHelper.Execute(count, " Dapper Sql ", () =>
            {
                using (SqlConnection conn = new SqlConnection(ConfigSugar.GetConfigString("SchoolContext")))
                {
                    }).ToList(); ;
                }
            });

            Console.WriteLine("");
        }
    }
}

查询单条

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using SyntacticSugar;

namespace ORMTest
{
    public class PerHelper
    {
        public static void Execute(int count, string title, Action fun)
        {
            PerformanceTest ptef = new PerformanceTest();
            ptef.SetIsMultithread(false);//开启多线程
            ptef.SetCount(count);//执行count次
            ptef.Execute(
                        i =>
                        {
                            fun();

                        },
                        res =>
                        {
                            Console.WriteLine($"执行{count}次,{title}{res}");
                        });

        }
    }
}

性能测试通用函数

代码下载

测试代码地址:https://pan.baidu.com/s/1kVnR97D

.NET ORM 哪家强的更多相关文章

  1. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  2. PAT乙级 1032. 挖掘机技术哪家强(20)

    1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底 ...

  3. PAT (Basic Level) Practise:1032. 挖掘机技术哪家强

    [题目链接] 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行 ...

  4. 挖掘机技术哪家强(c++实现)

    描述:为了用事实说明挖掘机技术到底哪家强,组织一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入:输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的 ...

  5. PAT-乙级-1032. 挖掘机技术哪家强(20)

    1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底 ...

  6. exe打包发行哪家强

    exe打包发行哪家强,我推荐Advanced Installer11.0: 该有的都有了,这是网盘地址:http://pan.baidu.com/s/1geRDPIz

  7. 跨站数据请求哪家强——青出于蓝的jsonp

    /* * 跨站数据请求哪家强--青出于蓝的jsonp数据格式 * @author gj * @date 2017-09-15 */ 先哲有云"青,取之于蓝,而青于蓝:冰,水为之,而寒于水&q ...

  8. 【安全狗SRC】抗D设备哪家强?你来!大佬告诉你答案

    上周,安全狗SRC联合SRC部落,携手推出了爆款话题:传统抗D设备 vs 新兴CDN抗D:抗D效果哪个好? 一经发布简直好评如潮,热评无数,四方雷动(?)原帖在此,错过的吃瓜表哥们可以再围观一下~ht ...

  9. PAT 1032 挖掘机技术哪家强

    https://pintia.cn/problem-sets/994805260223102976/problems/994805289432236032 为了用事实说明挖掘机技术到底哪家强,PAT组 ...

随机推荐

  1. 部署Eclipse中的Web项目到Tomcat服务器运行

    用Eclipse开发Web项目时,可以通过Tomcat服务器运行Web项目,此时Web项目被部署在[WorkSpace]\.metadata\.plugins\org.eclipse.wst.serv ...

  2. struts2笔记4

    1.自定义struts拦截器 应用场景:如果用户登陆后可以访问action中的所有方法,如果用户没有登陆不允许访问action中的方法,并且提示“你没有操作权限” 1)两个页面,一个用户登陆user. ...

  3. POJ 2516 Minimum Cost 最小费用流

    题目: 给出n*kk的矩阵,格子a[i][k]表示第i个客户需要第k种货物a[i][k]单位. 给出m*kk的矩阵,格子b[j][k]表示第j个供应商可以提供第k种货物b[j][k]单位. 再给出k个 ...

  4. 关于设置CFileDialog的默认路径

    CFileDialog   d_File(FRUE, NULL,NULL,NULL,szFilter,FromHandle(m_hWnd)); // 如果写了下面这句那么每次打开都是这个设置的默认路径 ...

  5. php框架Yaf路由重写

    php框架Yaf路由重写 通常为了友好的URL格式,会进行站点URL的重写,可以在webserver(Nginx)的配置中进行rewrite,也可在在程序端进行 以下使用Yaf框架进行URL的重写,进 ...

  6. 利用jenkins做项目的自动化部署

    最近领导要求上海本地的项目需要使用进jenkins实现自动化部署,以便可以直接将项目移交给运维的同学,减轻开发的工作量.记录下这次爬坑的过程. 一.前言 Jenkins是基于Java开发的一种持续集成 ...

  7. jqueryl操作dom文档实例

    <include file="Public:header"/> <link rel="stylesheet" href="../Pu ...

  8. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  9. vue使用矢量图

    1.在阿里巴巴矢量图标下载下来 2.放到static下 3.main.js下 import '../static/iconfont/iconfont.css' 4.调用<i class=&quo ...

  10. Linux Performance 一文

    http://www.brendangregg.com/linuxperf.html Brendan D. Gregg 专注 Linux performance & tuning 许多年,其博 ...