Skip to content

Commit f486848

Browse files
authored
Update benchmarks (#1451)
This fixes things for `netcoreapp3.1` and fixes the outstanding #1205.
1 parent 601a5c2 commit f486848

File tree

6 files changed

+67
-59
lines changed

6 files changed

+67
-59
lines changed

Dapper.Tests.Performance/Benchmarks.Massive.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class MassiveBenchmarks : BenchmarkBase
1414
public void Setup()
1515
{
1616
BaseSetup();
17+
RegisterSqlFactory();
1718
_model = new DynamicModel(ConnectionString);
1819
}
1920

Dapper.Tests.Performance/Benchmarks.PetaPoco.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class PetaPocoBenchmarks : BenchmarkBase
1414
public void Setup()
1515
{
1616
BaseSetup();
17+
RegisterSqlFactory();
1718
_db = new Database(ConnectionString, "System.Data.SqlClient");
1819
_db.OpenSharedConnection();
1920
_dbFast = new Database(ConnectionString, "System.Data.SqlClient");

Dapper.Tests.Performance/Benchmarks.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using BenchmarkDotNet.Attributes;
2-
using BenchmarkDotNet.Order;
32
using System;
43
using System.Configuration;
54
using System.Data.SqlClient;
@@ -22,6 +21,13 @@ protected void BaseSetup()
2221
_connection.Open();
2322
}
2423

24+
protected void RegisterSqlFactory()
25+
{
26+
#if NETCOREAPP
27+
System.Data.Common.DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);
28+
#endif
29+
}
30+
2531
protected void Step()
2632
{
2733
i++;

Dapper.Tests.Performance/Config.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@ public class Config : ManualConfig
1616

1717
public Config()
1818
{
19-
Add(ConsoleLogger.Default);
19+
AddLogger(ConsoleLogger.Default);
2020

21-
Add(CsvExporter.Default);
22-
Add(MarkdownExporter.GitHub);
23-
Add(HtmlExporter.Default);
21+
AddExporter(CsvExporter.Default);
22+
AddExporter(MarkdownExporter.GitHub);
23+
AddExporter(HtmlExporter.Default);
2424

2525
var md = MemoryDiagnoser.Default;
26-
Add(md);
27-
Add(new ORMColum());
28-
Add(TargetMethodColumn.Method);
29-
Add(new ReturnColum());
30-
Add(StatisticColumn.Mean);
31-
Add(StatisticColumn.StdDev);
32-
Add(StatisticColumn.Error);
33-
Add(BaselineRatioColumn.RatioMean);
34-
Add(DefaultColumnProviders.Metrics);
26+
AddDiagnoser(md);
27+
AddColumn(new ORMColum());
28+
AddColumn(TargetMethodColumn.Method);
29+
AddColumn(new ReturnColum());
30+
AddColumn(StatisticColumn.Mean);
31+
AddColumn(StatisticColumn.StdDev);
32+
AddColumn(StatisticColumn.Error);
33+
AddColumn(BaselineRatioColumn.RatioMean);
34+
AddColumnProvider(DefaultColumnProviders.Metrics);
3535

36-
Add(Job.ShortRun
36+
AddJob(Job.ShortRun
3737
.WithLaunchCount(1)
3838
.WithWarmupCount(2)
3939
.WithUnrollFactor(Iterations)

Dapper.Tests.Performance/Dapper.Tests.Performance.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<ProjectReference Include="..\Dapper.Contrib\Dapper.Contrib.csproj" />
1414
<PackageReference Include="Dashing" Version="2.2.0" />
1515
<PackageReference Include="Belgrade.Sql.Client" Version="1.1.4" />
16-
<PackageReference Include="BenchmarkDotNet" Version="0.11.5" />
16+
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
1717
<PackageReference Include="DevExpress.Xpo" Version="19.1.5" />
1818
<!--<PackageReference Include="BLToolkit" Version="4.3.6" />-->
1919
<PackageReference Include="EntityFramework" Version="6.3.0" />
@@ -27,6 +27,7 @@
2727
<PackageReference Include="Npgsql" Version="4.0.9" />
2828
<PackageReference Include="PetaPoco" Version="5.1.306" />
2929
<PackageReference Include="ServiceStack.OrmLite.SqlServer" Version="5.6.0" />
30+
<PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
3031
<PackageReference Include="System.Data.SQLite" Version="1.0.111" />
3132
</ItemGroup>
3233
<ItemGroup>

Readme.md

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -120,52 +120,51 @@ dotnet run -p .\Dapper.Tests.Performance\ -c Release -f netcoreapp3.1 -- -f * --
120120
```
121121
Output from the latest run is:
122122
``` ini
123-
BenchmarkDotNet=v0.11.1, OS=Windows 10.0.17134.254 (1803/April2018Update/Redstone4)
123+
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.208 (2004/?/20H1)
124124
Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
125-
Frequency=2742188 Hz, Resolution=364.6723 ns, Timer=TSC
126-
[Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3163.0
127-
ShortRun : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3163.0
125+
.NET Core SDK=3.1.201
126+
[Host] : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT
127+
ShortRun : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT
128128

129129
```
130-
| ORM | Method | Return | Mean | Gen 0 | Gen 1 | Gen 2 | Allocated |
131-
|------------- |------------------------------ |-------- |------------:|--------:|-------:|-------:|----------:|
132-
| LINQ to DB | &#39;First (Compiled)&#39; | Post | 78.75 us | 0.7500 | - | - | 2.66 KB |
133-
| LINQ to DB | Query&lt;T&gt; | Post | 80.38 us | 2.1250 | - | - | 6.87 KB |
134-
| Hand Coded | SqlCommand | Post | 87.16 us | 2.5000 | 1.0000 | 0.2500 | 12.24 KB |
135-
| Dapper | QueryFirstOrDefault&lt;dynamic&gt; | dynamic | 87.80 us | 4.3750 | - | - | 13.5 KB |
136-
| Belgrade | ExecuteReader | Post | 87.85 us | 3.6250 | 0.7500 | - | 11.27 KB |
137-
| Dapper | QueryFirstOrDefault&lt;T&gt; | Post | 91.51 us | 2.8750 | 0.8750 | 0.2500 | 13.46 KB |
138-
| Hand Coded | DataTable | dynamic | 91.74 us | 2.2500 | 0.6250 | - | 12.45 KB |
139-
| Dapper | &#39;Query&lt;T&gt; (buffered)&#39; | Post | 94.05 us | 2.8750 | 0.8750 | 0.2500 | 13.79 KB |
140-
| Dapper | &#39;Query&lt;dynamic&gt; (buffered)&#39; | dynamic | 95.25 us | 2.5000 | 1.0000 | 0.2500 | 13.87 KB |
141-
| Massive | &#39;Query (dynamic)&#39; | dynamic | 96.18 us | 3.2500 | 0.8750 | 0.3750 | 14.19 KB |
142-
| PetaPoco | &#39;Fetch&lt;T&gt; (Fast)&#39; | Post | 96.57 us | 2.7500 | 0.8750 | 0.2500 | 13.65 KB |
143-
| PetaPoco | Fetch&lt;T&gt; | Post | 97.62 us | 2.8750 | 0.8750 | 0.2500 | 14.59 KB |
144-
| Dapper | &#39;Contrib Get&lt;T&gt;&#39; | Post | 98.85 us | 2.8750 | 1.0000 | 0.2500 | 14.45 KB |
145-
| ServiceStack | SingleById&lt;T&gt; | Post | 102.39 us | 3.1250 | 0.8750 | 0.3750 | 17.52 KB |
146-
| LINQ to DB | First | Post | 103.54 us | 1.7500 | - | - | 5.51 KB |
147-
| Susanoo | &#39;Execute&lt;T&gt; (Static)&#39; | Post | 105.07 us | 2.8750 | 0.8750 | 0.2500 | 14.98 KB |
148-
| Dashing | Get | Post | 105.80 us | 3.1250 | 0.8750 | 0.3750 | 14.82 KB |
149-
| Susanoo | &#39;Execut&lt;dynamic&gt; (Static)&#39; | dynamic | 109.26 us | 3.1250 | 0.8750 | 0.2500 | 14.97 KB |
150-
| LINQ to SQL | &#39;First (Compiled)&#39; | Post | 114.62 us | 3.1250 | - | - | 9.82 KB |
151-
| Dapper | &#39;Query&lt;T&gt; (unbuffered)&#39; | Post | 119.72 us | 3.1250 | 0.8750 | 0.2500 | 13.83 KB |
152-
| Susanoo | &#39;Execute&lt;dynamic&gt; (Cache)&#39; | dynamic | 124.02 us | 3.6250 | 1.0000 | 0.5000 | 20.4 KB |
153-
| Susanoo | &#39;Execute&lt;T&gt; (Cache)&#39; | Post | 126.92 us | 4.2500 | 1.0000 | 0.5000 | 20.88 KB |
154-
| Dapper | &#39;Query&lt;dynamic&gt; (unbuffered)&#39; | dynamic | 139.89 us | 2.5000 | 1.0000 | 0.2500 | 13.87 KB |
155-
| EF 6 | SqlQuery | Post | 143.86 us | 5.2500 | 0.7500 | - | 27.86 KB |
156-
| EF Core | &#39;First (Compiled)&#39; | Post | 148.42 us | 5.0000 | - | - | 16.08 KB |
157-
| NHibernate | Get&lt;T&gt; | Post | 196.88 us | 5.7500 | 1.0000 | - | 32.5 KB |
158-
| EF Core | First | Post | 197.91 us | 6.5000 | - | - | 20.25 KB |
159-
| NHibernate | HQL | Post | 207.84 us | 6.0000 | 0.7500 | - | 35 KB |
160-
| EF Core | &#39;First (No Tracking)&#39; | Post | 213.58 us | 4.2500 | 0.7500 | 0.2500 | 21.36 KB |
161-
| EF Core | SqlQuery | Post | 247.25 us | 6.5000 | - | - | 20.56 KB |
162-
| EF 6 | First | Post | 247.53 us | 15.5000 | - | - | 48.29 KB |
163-
| NHibernate | Criteria | Post | 253.30 us | 13.2500 | 1.2500 | 0.2500 | 65.32 KB |
164-
| EF 6 | &#39;First (No Tracking)&#39; | Post | 265.80 us | 10.5000 | 1.0000 | - | 55.09 KB |
165-
| LINQ to SQL | ExecuteQuery | Post | 284.74 us | 7.0000 | 1.0000 | 0.5000 | 42.33 KB |
166-
| NHibernate | SQL | Post | 313.85 us | 26.5000 | 1.0000 | - | 101.01 KB |
167-
| LINQ to SQL | First | Post | 968.14 us | 4.0000 | 1.0000 | - | 14.68 KB |
168-
| NHibernate | LINQ | Post | 1,062.16 us | 11.0000 | 2.0000 | - | 62.37 KB |
130+
| ORM | Method | Return | Mean | StdDev | Error | Gen 0 | Gen 1 | Gen 2 | Allocated |
131+
|--------------- |------------------------------ |-------- |----------:|----------:|----------:|--------:|-------:|-------:|----------:|
132+
| Belgrade | ExecuteReader | Post | 94.46 μs | 8.115 μs | 12.268 μs | 1.7500 | 0.5000 | - | 8.42 KB |
133+
| Hand Coded | DataTable | dynamic | 105.43 μs | 0.998 μs | 1.508 μs | 3.0000 | - | - | 9.37 KB |
134+
| Hand Coded | SqlCommand | Post | 106.58 μs | 1.191 μs | 1.801 μs | 1.5000 | 0.7500 | 0.1250 | 7.42 KB |
135+
| Dapper | QueryFirstOrDefault&lt;dynamic&gt; | dynamic | 119.52 μs | 1.320 μs | 2.219 μs | 3.6250 | - | - | 11.39 KB |
136+
| Dapper | &#39;Query&lt;dynamic&gt; (buffered)&#39; | dynamic | 119.93 μs | 1.943 μs | 2.937 μs | 2.3750 | 1.0000 | 0.2500 | 11.73 KB |
137+
| Massive | &#39;Query (dynamic)&#39; | dynamic | 120.31 μs | 1.340 μs | 2.252 μs | 2.2500 | 1.0000 | 0.1250 | 12.07 KB |
138+
| Dapper | QueryFirstOrDefault&lt;T&gt; | Post | 121.57 μs | 1.564 μs | 2.364 μs | 1.7500 | 0.7500 | - | 11.35 KB |
139+
| Dapper | &#39;Query&lt;T&gt; (buffered)&#39; | Post | 121.67 μs | 2.913 μs | 4.403 μs | 1.8750 | 0.8750 | - | 11.65 KB |
140+
| PetaPoco | &#39;Fetch&lt;T&gt; (Fast)&#39; | Post | 124.91 μs | 4.015 μs | 6.747 μs | 2.0000 | 1.0000 | - | 11.5 KB |
141+
| Mighty | Query&lt;T&gt; | Post | 125.23 μs | 2.932 μs | 4.433 μs | 2.2500 | 1.0000 | - | 12.6 KB |
142+
| LINQ to DB | Query&lt;T&gt; | Post | 125.76 μs | 2.038 μs | 3.081 μs | 2.2500 | 0.7500 | 0.2500 | 10.62 KB |
143+
| PetaPoco | Fetch&lt;T&gt; | Post | 127.48 μs | 4.283 μs | 6.475 μs | 2.0000 | 1.0000 | - | 12.18 KB |
144+
| LINQ to DB | &#39;First (Compiled)&#39; | Post | 128.89 μs | 2.627 μs | 3.971 μs | 2.5000 | 0.7500 | - | 10.92 KB |
145+
| Mighty | Query&lt;dynamic&gt; | dynamic | 129.20 μs | 2.577 μs | 3.896 μs | 2.0000 | 1.0000 | - | 12.43 KB |
146+
| Mighty | SingleFromQuery&lt;T&gt; | Post | 129.41 μs | 2.094 μs | 3.166 μs | 2.2500 | 1.0000 | - | 12.6 KB |
147+
| Mighty | SingleFromQuery&lt;dynamic&gt; | dynamic | 130.59 μs | 2.432 μs | 3.677 μs | 2.0000 | 1.0000 | - | 12.43 KB |
148+
| Dapper | &#39;Contrib Get&lt;T&gt;&#39; | Post | 134.74 μs | 1.816 μs | 2.746 μs | 2.5000 | 1.0000 | 0.2500 | 12.29 KB |
149+
| ServiceStack | SingleById&lt;T&gt; | Post | 135.01 μs | 1.213 μs | 2.320 μs | 3.0000 | 1.0000 | 0.2500 | 15.27 KB |
150+
| LINQ to DB | First | Post | 151.87 μs | 3.826 μs | 5.784 μs | 3.0000 | 1.0000 | 0.2500 | 13.97 KB |
151+
| EF 6 | SqlQuery | Post | 171.00 μs | 1.460 μs | 2.791 μs | 3.7500 | 1.0000 | - | 23.67 KB |
152+
| DevExpress.XPO | GetObjectByKey&lt;T&gt; | Post | 172.36 μs | 3.758 μs | 5.681 μs | 5.5000 | 1.2500 | - | 29.06 KB |
153+
| Dapper | &#39;Query&lt;T&gt; (unbuffered)&#39; | Post | 174.40 μs | 3.296 μs | 4.983 μs | 2.0000 | 1.0000 | - | 11.77 KB |
154+
| Dapper | &#39;Query&lt;dynamic&gt; (unbuffered)&#39; | dynamic | 174.45 μs | 1.988 μs | 3.340 μs | 2.0000 | 1.0000 | - | 11.81 KB |
155+
| DevExpress.XPO | FindObject&lt;T&gt; | Post | 181.76 μs | 5.554 μs | 9.333 μs | 8.0000 | - | - | 27.15 KB |
156+
| DevExpress.XPO | Query&lt;T&gt; | Post | 189.81 μs | 4.187 μs | 8.004 μs | 10.0000 | - | - | 31.61 KB |
157+
| EF Core | &#39;First (Compiled)&#39; | Post | 199.72 μs | 3.983 μs | 7.616 μs | 4.5000 | - | - | 13.8 KB |
158+
| NHibernate | Get&lt;T&gt; | Post | 248.71 μs | 6.604 μs | 11.098 μs | 5.0000 | 1.0000 | - | 29.79 KB |
159+
| EF Core | First | Post | 253.20 μs | 3.033 μs | 5.097 μs | 5.5000 | - | - | 17.7 KB |
160+
| NHibernate | HQL | Post | 258.70 μs | 11.716 μs | 17.712 μs | 5.0000 | 1.0000 | - | 32.1 KB |
161+
| EF Core | SqlQuery | Post | 268.89 μs | 19.349 μs | 32.516 μs | 6.0000 | - | - | 18.5 KB |
162+
| EF 6 | First | Post | 278.46 μs | 12.094 μs | 18.284 μs | 13.5000 | - | - | 44.18 KB |
163+
| EF Core | &#39;First (No Tracking)&#39; | Post | 280.88 μs | 8.192 μs | 13.765 μs | 3.0000 | 0.5000 | - | 19.38 KB |
164+
| NHibernate | Criteria | Post | 304.90 μs | 2.232 μs | 4.267 μs | 11.0000 | 1.0000 | - | 60.29 KB |
165+
| EF 6 | &#39;First (No Tracking)&#39; | Post | 316.55 μs | 7.667 μs | 11.592 μs | 8.5000 | 1.0000 | - | 50.95 KB |
166+
| NHibernate | SQL | Post | 335.41 μs | 3.111 μs | 4.703 μs | 19.0000 | 1.0000 | - | 78.86 KB |
167+
| NHibernate | LINQ | Post | 807.79 μs | 27.207 μs | 45.719 μs | 8.0000 | 2.0000 | - | 53.65 KB |
169168

170169

171170
Feel free to submit patches that include other ORMs - when running benchmarks, be sure to compile in Release and not attach a debugger (<kbd>Ctrl</kbd>+<kbd>F5</kbd>).

0 commit comments

Comments
 (0)