.NET 之 ORM 性能评测

it2022-05-06  8

.NET 之 ORM 性能评测

Why

你应该总能听到某ORM性能比Dapper高你应该有如下疑问: 基准测试是否权威基准测试的方式是否合理基准测试的标准是否能够统一统一基准测试标准/规范

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

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

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

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

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

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

Git-Clone https://github.com/Ahoo-Wang/Dappercd Dapper/Dapper.Tests.Performancedotnet publish -c release运行 Dapper.Tests.Performance.exe提示输入,请输入 "*" 运行所有基准测试等待测试结果,目录:BenchmarkDotNet.Artifacts 下会有一个日志文件,和 results 文件夹 (测试结果文件存放在此目录)

基准测试结果

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

BenchmarkDotNet=v0.11.1, OS=Windows 10.0.17763 Intel Core i7-8750H CPU 2.20GHz (Max: 2.21GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.8.3801.0 ShortRun : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.8.3801.0 ORMMethodReturnMeanRankGen 0Gen 1Gen 2AllocatedBelgradeExecuteReaderPost78.74 us12.25000.6250-10.63 KBLINQ to DB'First (Compiled)'Post97.61 us20.5000--2.67 KBLINQ to DBQuery<T>Post103.05 us31.37500.1250-6.91 KBHand CodedSqlCommandPost107.37 us42.00001.00000.500012.29 KBDapperQueryFirstOrDefault<dynamic>dynamic110.83 us52.87500.1250-13.57 KBDapperQueryFirstOrDefault<T>Post111.65 us52.25001.00000.375013.53 KBHand CodedDataTabledynamic114.78 us62.00000.5000-12.51 KBPetaPoco'Fetch<T> (Fast)'Post114.95 us62.25000.87500.250013.71 KBDapper'Query<dynamic> (buffered)'dynamic115.54 us62.25001.00000.250013.93 KBPetaPocoFetch<T>Post119.76 us72.50001.00000.250014.66 KBDapper'Query<T> (buffered)'Post122.10 us82.25000.87500.375013.86 KBSusanoo'Execut<dynamic> (Static)'dynamic122.68 us82.50000.75000.250015.03 KBMassive'Query (dynamic)'dynamic122.82 us82.37500.87500.250014.25 KBServiceStackSingleById<T>Post123.93 us83.00000.75000.250017.59 KBLINQ to DBFirstPost124.53 us81.12500.1250-5.53 KBSmartSqlQuerySingleSqlParameterCollectionPost125.26 us82.50000.75000.250015.48 KBSmartSqlQuerySinglePost126.79 us92.50000.75000.250015.59 KBLINQ to SQL'First (Compiled)'Post127.17 us92.0000--9.87 KBSmartSqlGetByIdPost127.24 us92.75000.75000.250015.89 KBSmartSqlQuerySingleStrongRequestPost127.70 us92.50000.75000.250015.51 KBSmartSqlQuerySingleFromXmlPost128.27 us92.75000.75000.250016.23 KBSusanoo'Execute<T> (Static)'Post128.92 us92.50000.75000.250015.05 KBSmartSqlQuerySingleStrongRequest<dynamic>dynamic129.88 us92.75001.00000.500016.54 KBSmartSqlQuerySingleSqlParameterCollection<dynamic>dynamic130.96 us92.50000.75000.250016.51 KBDapper'Contrib Get<T>'Post132.10 us92.25001.00000.250014.51 KBDevExpress.XPOFindObject<T>Post137.14 us106.50000.2500-29.97 KBSusanoo'Execute<dynamic> (Cache)'dynamic140.24 us113.25001.00000.500020.48 KBSusanoo'Execute<T> (Cache)'Post141.23 us113.25000.75000.250020.96 KBEF 6SqlQueryPost154.68 us124.75000.7500-27.96 KBDevExpress.XPOGetObjectByKey<T>Post160.87 us135.25001.2500-32.35 KBIBatisQueryForObjectPost163.87 us142.75000.75000.250016.59 KBDapper'Query<T> (unbuffered)'Post166.28 us152.25000.75000.250013.89 KBDapper'Query<dynamic> (unbuffered)'dynamic171.82 us162.25000.75000.250013.93 KBDevExpress.XPOQuery<T>Post172.38 us167.50000.2500-35.02 KBFreeSqlFromSqlFirstDynamicdynamic180.44 us173.25000.75000.250019.38 KBEF Core'First (Compiled)'Post188.02 us183.5000--16.14 KBFreeSqlFromSqlFirstPost196.92 us193.25000.75000.250019.17 KBNHibernateGet<T>Post201.46 us205.75000.7500-32.62 KBNHibernateHQLPost207.57 us215.50000.7500-35.11 KBChloeFirstPost209.26 us215.00000.75000.250029.85 KBEF CoreSqlQueryPost234.51 us224.0000--20.64 KBEF CoreFirstPost238.67 us234.2500--20.33 KBEF 6FirstPost243.86 us2410.5000--48.44 KBLINQ to SQLExecuteQueryPost250.54 us257.00001.00000.500042.48 KBEF Core'First (No Tracking)'Post250.59 us253.75000.75000.250021.44 KBNHibernateCriteriaPost256.87 us2611.00001.0000-65.64 KBEF 6'First (No Tracking)'Post314.69 us279.00001.0000-55.27 KBNHibernateSQLPost336.02 us2819.00001.0000-101.4 KBFreeSqlFirstPost429.83 us295.00001.00000.500031.56 KBSqlSugarFirstPost583.49 us3010.00001.0000-62.5 KBLINQ to SQLFirstPost761.03 us313.00001.0000-14.7 KBNHibernateLINQPost778.43 us3210.00002.0000-64.03 KB

转载于:https://www.cnblogs.com/Ahoo-Wang/p/dotnet-orm-performance-test.html

相关资源:几种常用的ORM工具测试比较

最新回复(0)