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. 数据库:django ORM如何处理N+1查询

    数据库N+1查询是个常见的问题,简单描述场景如下 基本场景 class Category(models.Model): name = models.CharField(max_length=30) c ...

  2. oracle 归档日志

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档 ...

  3. Java中的Comparable接口和Comparator接口

    Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个 ...

  4. 剑指offer系列47---翻转单词顺序

    [题目]输入“I am a student.”>>>“.tneduts a ma I”.>>输出:student. a am I package com.exe9.off ...

  5. oc 可变參数传递

    - (id)initWithFrame:(CGRect)frame delegate:(id<SGFocusImageFrameDelegate>)delegate focusImageI ...

  6. GCC 警告

    -w -W禁止/开启 编译警告的打印.这个警告不建议使用.大约2012年底,公司代码进行一次大重构,另外从Codeblock集成开发环境转向Makefile管理,Makefile里面默认使用了-w,因 ...

  7. django后台admin csv 格式表格导出

    1.在app下新建一个.py文件  此例commen.py commen.py (内容)(具体怎么导出的也不知道这么写就对了) import csv from django.http import H ...

  8. 一句话的事儿,Head first 设计模式

    head first 设计模式,是比较有趣的一本设计模式的书. 在学校里看书和在工作时看书,意义是不一样的.在学校时是为读书而读书,我们可以从0到1,我们有的是时间.但是工作后就不一样. 我觉得这时的 ...

  9. javaSE习题 第一章 JAVA语言概述

    转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...

  10. Tomcat源码学习(1)

    Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...