.NET 之 ORM 性能评测

Why

  1. 你应该总能听到某ORM性能比Dapper高

  2. 你应该有如下疑问:

    1. 基准测试是否权威

    2. 基准测试的方式是否合理

    3. 基准测试的标准是否能够统一

    4. 统一基准测试标准/规范

如何进行姿势正确的性能测试

相信大家对 Dapper 的性能,以及基准测试的权威性是没有疑问的(否则不会有那么多ORM在做性能测试的时候直接选型Dapper),那么我们就使用 Dapper 性能基准测试 来作为我们的基准测试模板,并加入一些没有纳入基准测试的 ORM 。这样从合理性/可信度就大体有了一个标准和保障。

接下来 fork Dapper GitHub 仓库,并添加了 SmartSql/IBatis.Net/FreeSql/SqlSugar/Chloe

源代码地址:https://github.com/Ahoo-Wang/Dapper,如对测试结果,测试方法有疑问请给我提交issue。

如何自己进行以上基准测试

强烈建议读者按照以下步骤自己运行基准测试。

  1. Git-Clone https://github.com/Ahoo-Wang/Dapper

  2. cd Dapper/Dapper.Tests.Performance

  3. dotnet publish -c release

  4. 运行 Dapper.Tests.Performance.exe

  5. 提示输入,请输入 "*" 运行所有基准测试

  6. 等待测试结果,目录:BenchmarkDotNet.Artifacts 下会有一个日志文件,和 results 文件夹 (测试结果文件存放在此目录)

640?wx_fmt=jpeg

基准测试结果

重要提示:FreeSql/SqlSugar 官方nuget包为非Release版本,所以测试结果会有影响,仅供参考。

BelgradeExecuteReaderPost78.74 us12.25000.6250-10.63 KB
LINQ to DB'First (Compiled)'Post97.61 us20.5000--2.67 KB
LINQ to DBQuery<T>Post103.05 us31.37500.1250-6.91 KB
Hand CodedSqlCommandPost107.37 us42.00001.00000.500012.29 KB
DapperQueryFirstOrDefault<dynamic>dynamic110.83 us52.87500.1250-13.57 KB
DapperQueryFirstOrDefault<T>Post111.65 us52.25001.00000.375013.53 KB
Hand CodedDataTabledynamic114.78 us62.00000.5000-12.51 KB
PetaPoco'Fetch<T> (Fast)'Post114.95 us62.25000.87500.250013.71 KB
Dapper'Query<dynamic> (buffered)'dynamic115.54 us62.25001.00000.250013.93 KB
PetaPocoFetch<T>Post119.76 us72.50001.00000.250014.66 KB
Dapper'Query<T> (buffered)'Post122.10 us82.25000.87500.375013.86 KB
Susanoo'Execut<dynamic> (Static)'dynamic122.68 us82.50000.75000.250015.03 KB
Massive'Query (dynamic)'dynamic122.82 us82.37500.87500.250014.25 KB
ServiceStackSingleById<T>Post123.93 us83.00000.75000.250017.59 KB
LINQ to DBFirstPost124.53 us81.12500.1250-5.53 KB
SmartSqlQuerySingleSqlParameterCollectionPost125.26 us82.50000.75000.250015.48 KB
SmartSqlQuerySinglePost126.79 us92.50000.75000.250015.59 KB
LINQ to SQL'First (Compiled)'Post127.17 us92.0000--9.87 KB
SmartSqlGetByIdPost127.24 us92.75000.75000.250015.89 KB
SmartSqlQuerySingleStrongRequestPost127.70 us92.50000.75000.250015.51 KB
SmartSqlQuerySingleFromXmlPost128.27 us92.75000.75000.250016.23 KB
Susanoo'Execute<T> (Static)'Post128.92 us92.50000.75000.250015.05 KB
SmartSqlQuerySingleStrongRequest<dynamic>dynamic129.88 us92.75001.00000.500016.54 KB
SmartSqlQuerySingleSqlParameterCollection<dynamic>dynamic130.96 us92.50000.75000.250016.51 KB
Dapper'Contrib Get<T>'Post132.10 us92.25001.00000.250014.51 KB
DevExpress.XPOFindObject<T>Post137.14 us106.50000.2500-29.97 KB
Susanoo'Execute<dynamic> (Cache)'dynamic140.24 us113.25001.00000.500020.48 KB
Susanoo'Execute<T> (Cache)'Post141.23 us113.25000.75000.250020.96 KB
EF 6SqlQueryPost154.68 us124.75000.7500-27.96 KB
DevExpress.XPOGetObjectByKey<T>Post160.87 us135.25001.2500-32.35 KB
IBatisQueryForObjectPost163.87 us142.75000.75000.250016.59 KB
Dapper'Query<T> (unbuffered)'Post166.28 us152.25000.75000.250013.89 KB
Dapper'Query<dynamic> (unbuffered)'dynamic171.82 us162.25000.75000.250013.93 KB
DevExpress.XPOQuery<T>Post172.38 us167.50000.2500-35.02 KB
FreeSqlFromSqlFirstDynamicdynamic180.44 us173.25000.75000.250019.38 KB
EF Core'First (Compiled)'Post188.02 us183.5000--16.14 KB
FreeSqlFromSqlFirstPost196.92 us193.25000.75000.250019.17 KB
NHibernateGet<T>Post201.46 us205.75000.7500-32.62 KB
NHibernateHQLPost207.57 us215.50000.7500-35.11 KB
ChloeFirstPost209.26 us215.00000.75000.250029.85 KB
EF CoreSqlQueryPost234.51 us224.0000--20.64 KB
EF CoreFirstPost238.67 us234.2500--20.33 KB
EF 6FirstPost243.86 us2410.5000--48.44 KB
LINQ to SQLExecuteQueryPost250.54 us257.00001.00000.500042.48 KB
EF Core'First (No Tracking)'Post250.59 us253.75000.75000.250021.44 KB
NHibernateCriteriaPost256.87 us2611.00001.0000-65.64 KB
EF 6'First (No Tracking)'Post314.69 us279.00001.0000-55.27 KB
NHibernateSQLPost336.02 us2819.00001.0000-101.4 KB
FreeSqlFirstPost429.83 us295.00001.00000.500031.56 KB
SqlSugarFirstPost583.49 us3010.00001.0000-62.5 KB
LINQ to SQLFirstPost761.03 us313.00001.0000-14.7 KB
NHibernateLINQPost778.43 us3210.00002.0000-64.03 KB

原文地址:https://www.cnblogs.com/Ahoo-Wang/p/dotnet-orm-performance-test.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Loj #6089. 小 Y 的背包计数问题

Loj #6089. 小 Y 的背包计数问题 Solution 似乎是比较套路的东西。 我们发现对于i≤ni\leq \sqrt ni≤n​的部分是一个多重背包&#xff0c;而剩下的部分是一个完全背包&#xff0c;因此考虑分开计算之后合并答案。 part one 当i≤ni\leq \sqrt ni≤n​时&#xff0c;令fi…

CF817E Choosing The Commander 01tire 贪心

看到集合和异或&#xff0c;可以想到01tire(但是我没有想到)。 让后就可以对于每次插入和删除一个数&#xff0c;都在01tire树上操作即可。让后记录一下到当前位(当然是从高位到低位啦)有相同前缀的数的个数。例如样例建图出来大概是这样的&#xff1a; 可以看到从编号为2的点开…

不断进化的分支和需求管理

昨天有朋友在公众号私信问我几个关于代码分支管理的问题&#xff0c;这几个问题是我去年写的《在团队中使用GitLab中的Merge Request工作模式》一文结尾时抛出的几个问题&#xff1a;如果系统上线后有紧急Bug需要处理&#xff0c;这个流程应该怎样去调整&#xff1f;每个任务都…

Loj #6077. 「2017 山东一轮集训 Day7」逆序对

Loj #6077. 「2017 山东一轮集训 Day7」逆序对 Solution 令fi,jf_{i,j}fi,j​表示前iii个数产生jjj个逆序对的方案数&#xff0c;每次考虑把i1i1i1加入&#xff0c;有i1i1i1个插入位置分别产生0..i0..i0..i个新的逆序对。 因此fnf_{n}fn​的生成函数为(1x)(1xx2)…(1x…xn−…

CF56E Domino Principle 树状数组 + 简单dp

一个比较简单的题&#xff0c;但是我还是没做出来(哭。 很容易想到从后往前做&#xff0c;所以我们可以维护一个dp数组f&#xff0c;f(i)表示到第i个牌倒下能达到的最远距离。 f直接倒着跑&#xff0c;每次取[x,xh−1][x,xh-1][x,xh−1]的最大值即可&#xff0c;可以用线段树比…

基于Docker的Consul服务发现集群搭建

在去年的.NET Core微服务系列文章中&#xff0c;初步学习了一下Consul服务发现&#xff0c;总结了两篇文章。本次基于Docker部署的方式&#xff0c;以一个Demo示例来搭建一个Consul的示例集群&#xff0c;最后给出一个HA的架构示范&#xff0c;也会更加贴近于实际应用环境。一、…

Hills And Valleys CodeForces - 1467B 思维

给你一个数组&#xff0c;最多可以修改一个数&#xff0c;问最少的山峰和山谷数量之和。 小菜鸡做了一年。 一上来想猜个结论&#xff0c;让每个数等于其相邻的两个数&#xff0c;看了题解之后也证明的正确性&#xff0c;当时直接写就没后面这么多事了。 但是命运让我分情况讨…

2018 ACM-ICPC World Finals Problem D.Gem Island

2018 ACM-ICPC World Finals Problem D.Gem Island Solution 其实就是求x1x2⋯xnnd,xi∈[1,d1]x_1x_2\dots x_nnd,x_i\in[1,d1]x1​x2​⋯xn​nd,xi​∈[1,d1]的前rrr大的xix_ixi​的和的期望&#xff0c;可以发现每一种不同的序列{xi}\{x_i\}{xi​}的出现概率都是一个定值&a…

[译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

介绍开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置&#xff0c;并且耗费时间和精力。这篇文章&#xff0c;我们将使用LazZiya.ExpressLocalization nuget包一步本地化支持。背景大多数网络应用程序都是基于网址的本地化。因此我们可以在网址中看到所选的…

2019 ICPC World Finals Problem B. Beautiful Bridges

2019 ICPC World Finals Problem B. Beautiful Bridges Solution 太菜了&#xff0c;sbsbsb题调了一个下午。 首先有一个显然的O(n3)O(n^3)O(n3)的dpdpdp&#xff0c;令fif_ifi​表示最后一个桥柱在iii的最小代价&#xff0c;枚举上一个桥柱jjj&#xff0c;因为地面超过桥拱…

ac 梦幻布丁 启发式合并

题意&#xff1a;中文题。 对于每种颜色&#xff0c;我们都可以看成一个集合。让后把一种颜色变成另一种颜色就转换成了把两个集合的合并问题。显然我们有一个复杂度为O(NlogN)O(NlogN)O(NlogN)的启发式合并能完美的解决这个问题。 解决合并问题了&#xff0c;现在需要解决如何…

VS Code 1.35 发布!全新 logo 来临,远程开发进入稳定版

近期&#xff08; 北京时间 2019 年 6 月 6 日 &#xff09;&#xff0c;微软发布了 Visual Studio Code 1.35 版本&#xff0c;带来了众多更新。全新的 logo全新的图标来啦~ 这一次的图标更新历时两个月&#xff0c;VS Code 团队倾听了用户们的反馈。大家对新图标还喜欢吗&…

P2617 Dynamic Rankings 整体二分

树套树板子题&#xff0c;但是整体二分不管是时间复杂度还是空间复杂度都表现更优秀&#xff0c;所以用整体二分来水一波。 普通的整体二分是没有修改操作的。然鹅我们处理修改操作也比较容易&#xff0c;直接减上这个数&#xff0c;让后加上修改之后的数即可。这样按照时间戳来…

2019 ICPC World Finals Problem J. Miniature Golf

2019 ICPC World Finals Problem J. Miniature Golf Solution 设lll为l0l_0l0​时iii的总分为si,l0s_{i,l_0}si,l0​​&#xff0c;si,l0∑kmin(ai,k,l0)s_{i,l_0}\sum_k min(a_{i,k},l_0)si,l0​​∑k​min(ai,k​,l0​)&#xff0c;让lll从小到大依次变化&#xff0c;可以发…

基于Domain Driven Design&Clean Architecture原则分层的新启动模板

本文的内容将在0.18.0中发布. Abp中文网将同步更新框架.敬请期待...MVC应用程序启动模板介绍MVC应用程序启动模板是基于领域驱动设计(DDD)分层(或根据偏好分层)的应用程序结构.在这篇文档中详细介绍了解决方案结构和项目参阅ASP.NET Core MVC 模板入门创建此模板的新解决方案并…

CF 1475 F . Unusual Matrix 思维

传送门 大体题意&#xff1a;给定两个矩阵a和b&#xff0c;给定一个操作&#xff0c;这个操作可以将a矩阵任意一行或者任意一列取反&#xff0c;问能否将a变成b。 乍一看不是一个很难的题&#xff0c;但是想我这样思维不好的还是看不出来什么东西。让后看到了题解前几句话 “ …

NEERC 17 Problem I. Interactive Sort

NEERC 17 Problem I. Interactive Sort Solution 当写了两倍正解的代码使用了两倍于正解的操作步数…… 刚开始的想法是求出一个bbb&#xff0c;再求出一个aaa&#xff0c;依次轮换&#xff0c;分别维护当前知道确定值的a,ba,ba,b的有序序列&#xff0c;然后求aaa就在bbb的有…

.Net Core 微服务容器系列基础目录篇

1.开场白HI&#xff0c;各位老铁&#xff0c;大家端午好&#xff0c;之前写了些关于.net core商城系列的文章&#xff0c;有点乱&#xff0c;今天心血来潮想着整理一下&#xff08;今天只是先把目录列出来&#xff0c;后面的每篇文章这两天会进行重新修改的&#xff0c;目前先将…

CF 1475 D. Cleaning the Phone 思维模型

传送门 题意&#xff1a;一个人有n个程序&#xff0c;每个程序都有占的缓存和价值。现在要释放m及以上的缓存&#xff0c;求失去的价值的最小值。 题解 首先我们知道如果所有缓存加起来 < m 的话&#xff0c;直接输出 - 1 就行啦。 其次呢&#xff0c;我们发现价值只有1和2…

NEERC 17 G.The Great Wall

NEERC 17 G.The Great Wall Solution 这题的第一步tricktricktrick是&#xff1a;我们注意到取a,b,ca,b,ca,b,c的集合两两不交且并集为UUU&#xff0c;因此确定了b,cb,cb,c之后可以简单地唯一确定aaa&#xff0c;于是我们通过让bi−ai,ci−ai,Ans∑aib_i-a_i,c_i-a_i,Ans\sum…