-
Notifications
You must be signed in to change notification settings - Fork 5
Performance
The benchmark can be found in DotNetToolkit.Repository.Performance and can be compiled via:
dotnet build DotNetToolkit.Repository.Performance.csproj --configuration Release
dotnet run DotNetToolkit.Repository.Performance.csproj --configuration Release --filter *
Output from the latest run is:
BenchmarkDotNet=v0.11.2, OS=Windows 10.0.17134.706 (1803/April2018Update/Redstone4)
Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
Frequency=2742188 Hz, Resolution=364.6723 ns, Timer=TSC
[Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3394.0
| Provider | Method | Mean | Rank |
|---|---|---|---|
| AdoNet | FindAllWithDefaultOptions | 3.545 ms | 1 |
| InMemory | FindAllWithPagingOptions | 3.649 ms | 2 |
| InMemory | FindAllWithDefaultOptions | 3.756 ms | 3 |
| InMemory | FindAllWithPredicate | 4.012 ms | 4 |
| Xml | FindAllWithPredicate | 4.291 ms | 5 |
| Json | FindAllWithPredicate | 4.493 ms | 6 |
| Xml | FindAllWithPagingOptions | 4.582 ms | 7 |
| AdoNet | FindAllWithPagingOptions | 4.617 ms | 7 |
| Xml | FindAllWithDefaultOptions | 4.759 ms | 8 |
| Json | FindAllWithDefaultOptions | 4.817 ms | 9 |
| Json | FindAllWithPagingOptions | 5.038 ms | 10 |
| EntityFramework | FindAllWithPagingOptions | 5.463 ms | 11 |
| AdoNet | FindAllWithPredicate | 6.188 ms | 12 |
| NHibernate | FindAllWithPredicate | 9.509 ms | 13 |
| EntityFramework | FindAllWithDefaultOptions | 9.673 ms | 14 |
| EntityFrameworkCore | FindAllWithPagingOptions | 10.423 ms | 15 |
| EntityFramework | FindAllWithPredicate | 12.411 ms | 16 |
| NHibernate | FindAllWithPagingOptions | 13.906 ms | 17 |
| NHibernate | FindAllWithDefaultOptions | 15.502 ms | 18 |
| EntityFrameworkCore | FindAllWithDefaultOptions | 17.300 ms | 19 |
| EntityFrameworkCore | FindAllWithPredicate | 33.442 ms | 20 |
| InMemory | AddRange | 1.186 ms | 1 |
| Json | AddRange | 2.665 ms | 2 |
| Xml | AddRange | 3.176 ms | 3 |
| NHibernate | AddRange | 3.817 ms | 4 |
| Xml | Add | 4.360 ms | 5 |
| EntityFramework | AddRange | 5.490 ms | 6 |
| AdoNet | AddRange | 5.924 ms | 7 |
| EntityFrameworkCore | AddRange | 6.371 ms | 8 |
| InMemory | Add | 6.554 ms | 9 |
| AdoNet | Add | 37.412 ms | 10 |
| NHibernate | Add | 92.840 ms | 11 |
| Json | Add | 171.917 ms | 12 |
| EntityFrameworkCore | Add | 281.592 ms | 13 |
| EntityFramework | Add | 2,387.156 ms | 14 |
| InMemory | DeleteRange | 1.395 ms | 1 |
| InMemory | Delete | 1.435 ms | 2 |
| Xml | DeleteRange | 2.154 ms | 3 |
| InMemory | DeleteWithId | 2.577 ms | 4 |
| NHibernate | DeleteRange | 2.811 ms | 5 |
| NHibernate | Delete | 3.051 ms | 6 |
| Xml | Delete | 3.083 ms | 7 |
| Json | Delete | 3.189 ms | 8 |
| Json | DeleteRange | 3.461 ms | 9 |
| AdoNet | Delete | 3.590 ms | 10 |
| AdoNet | DeleteRange | 3.731 ms | 11 |
| InMemory | DeleteWithPredicate | 4.329 ms | 12 |
| Xml | DeleteWithId | 5.091 ms | 13 |
| AdoNet | DeleteWithPredicate | 5.099 ms | 13 |
| EntityFramework | DeleteRange | 6.211 ms | 14 |
| EntityFramework | Delete | 6.363 ms | 15 |
| Xml | DeleteWithPredicate | 6.485 ms | 16 |
| Json | DeleteWithId | 6.896 ms | 17 |
| Json | DeleteWithPredicate | 7.195 ms | 18 |
| EntityFramework | DeleteWithId | 7.569 ms | 19 |
| EntityFrameworkCore | Delete | 10.176 ms | 20 |
| NHibernate | DeleteWithPredicate | 10.195 ms | 20 |
| EntityFrameworkCore | DeleteRange | 10.829 ms | 21 |
| EntityFrameworkCore | DeleteWithId | 14.942 ms | 22 |
| AdoNet | DeleteWithId | 15.920 ms | 23 |
| EntityFramework | DeleteWithPredicate | 18.969 ms | 24 |
| NHibernate | DeleteWithId | 20.966 ms | 25 |
| EntityFrameworkCore | DeleteWithPredicate | 25.646 ms | 26 |
| InMemory | UpdateRange | 1.570 ms | 1 |
| InMemory | Update | 2.344 ms | 2 |
| NHibernate | UpdateRange | 2.910 ms | 3 |
| Xml | Update | 3.853 ms | 4 |
| Json | UpdateRange | 3.860 ms | 4 |
| Xml | UpdateRange | 4.383 ms | 5 |
| Json | Update | 4.590 ms | 6 |
| EntityFrameworkCore | UpdateRange | 5.188 ms | 7 |
| AdoNet | UpdateRange | 5.433 ms | 8 |
| EntityFramework | UpdateRange | 5.458 ms | 8 |
| EntityFrameworkCore | Update | 9.774 ms | 9 |
| AdoNet | Update | 11.670 ms | 10 |
| EntityFramework | Update | 11.865 ms | 11 |
| NHibernate | Update | 24.401 ms | 12 |
| InMemory | Async_AddRange | 1.466 ms | 1 |
| InMemory | Async_Add | 2.301 ms | 2 |
| Xml | Async_Add | 3.557 ms | 3 |
| NHibernate | Async_AddRange | 3.585 ms | 3 |
| Json | Async_Add | 4.540 ms | 4 |
| EntityFramework | Async_AddRange | 4.723 ms | 5 |
| Xml | Async_AddRange | 5.223 ms | 6 |
| Json | Async_AddRange | 5.246 ms | 6 |
| EntityFrameworkCore | Async_AddRange | 10.581 ms | 7 |
| AdoNet | Async_AddRange | 12.638 ms | 8 |
| AdoNet | Async_Add | 38.519 ms | 9 |
| EntityFrameworkCore | Async_Add | 47.021 ms | 10 |
| EntityFramework | Async_Add | 49.223 ms | 11 |
| NHibernate | Async_Add | 72.162 ms | 12 |
| InMemory | Async_UpdateRange | 1.572 ms | 1 |
| InMemory | Async_Update | 1.953 ms | 2 |
| EntityFramework | Async_Update | 3.151 ms | 3 |
| EntityFramework | Async_UpdateRange | 3.688 ms | 4 |
| Json | Async_Update | 3.823 ms | 5 |
| NHibernate | Async_UpdateRange | 4.244 ms | 6 |
| Json | Async_UpdateRange | 4.869 ms | 7 |
| EntityFrameworkCore | Async_Update | 5.764 ms | 8 |
| Xml | Async_UpdateRange | 6.294 ms | 9 |
| Xml | Async_Update | 6.896 ms | 10 |
| EntityFrameworkCore | Async_UpdateRange | 7.079 ms | 11 |
| AdoNet | Async_UpdateRange | 11.491 ms | 12 |
| AdoNet | Async_Update | 12.033 ms | 13 |
| NHibernate | Async_Update | 41.251 ms | 14 |
| InMemory | Async_DeleteRange | 1.007 ms | 1 |
| InMemory | Async_Delete | 1.547 ms | 2 |
| InMemory | Async_DeleteWithId | 1.862 ms | 3 |
| Xml | Async_Delete | 2.470 ms | 4 |
| NHibernate | Async_DeleteRange | 2.692 ms | 5 |
| Json | Async_DeleteRange | 3.025 ms | 6 |
| Json | Async_Delete | 3.298 ms | 7 |
| Xml | Async_DeleteRange | 3.906 ms | 8 |
| Json | Async_DeleteWithId | 4.840 ms | 9 |
| Xml | Async_DeleteWithId | 5.564 ms | 10 |
| EntityFramework | Async_DeleteRange | 6.153 ms | 11 |
| Xml | Async_DeleteWithPredicate | 6.628 ms | 12 |
| InMemory | Async_DeleteWithPredicate | 6.881 ms | 13 |
| Json | Async_DeleteWithPredicate | 8.743 ms | 14 |
| AdoNet | Async_DeleteRange | 11.702 ms | 15 |
| EntityFrameworkCore | Async_Delete | 11.829 ms | 16 |
| EntityFrameworkCore | Async_DeleteRange | 11.843 ms | 16 |
| EntityFramework | Async_Delete | 12.254 ms | 17 |
| NHibernate | Async_DeleteWithPredicate | 20.095 ms | 18 |
| AdoNet | Async_Delete | 21.309 ms | 19 |
| AdoNet | Async_DeleteWithPredicate | 32.882 ms | 20 |
| AdoNet | Async_DeleteWithId | 36.036 ms | 21 |
| NHibernate | Async_Delete | 41.896 ms | 22 |
| EntityFramework | Async_DeleteWithId | 49.975 ms | 23 |
| EntityFrameworkCore | Async_DeleteWithPredicate | 60.005 ms | 24 |
| EntityFramework | Async_DeleteWithPredicate | 69.342 ms | 25 |
| EntityFrameworkCore | Async_DeleteWithId | 80.195 ms | 26 |
| NHibernate | Async_DeleteWithId | 140.228 ms | 27 |
| InMemory | ToDictionaryWithDefaultOptions | 3.494 ms | 1 |
| InMemory | ToDictionaryWithPagingOptions | 3.571 ms | 2 |
| AdoNet | ToDictionaryWithPagingOptions | 3.880 ms | 3 |
| Json | ToDictionaryWithPagingOptions | 4.263 ms | 4 |
| Json | ToDictionaryWithDefaultOptions | 4.474 ms | 5 |
| Xml | ToDictionaryWithDefaultOptions | 4.624 ms | 6 |
| Xml | ToDictionaryWithPagingOptions | 4.628 ms | 6 |
| EntityFramework | ToDictionaryWithPagingOptions | 5.238 ms | 7 |
| EntityFramework | ToDictionaryWithDefaultOptions | 8.675 ms | 8 |
| NHibernate | ToDictionaryWithDefaultOptions | 9.973 ms | 9 |
| NHibernate | ToDictionaryWithPagingOptions | 11.804 ms | 10 |
| EntityFrameworkCore | ToDictionaryWithPagingOptions | 13.972 ms | 11 |
| AdoNet | ToDictionaryWithDefaultOptions | 15.632 ms | 12 |
| EntityFrameworkCore | ToDictionaryWithDefaultOptions | 19.950 ms | 13 |
| InMemory | GroupByWithDefaultOptions | 3.861 ms | 1 |
| Xml | GroupByWithDefaultOptions | 4.572 ms | 2 |
| Json | GroupByWithPagingOptions | 4.709 ms | 3 |
| Json | GroupByWithDefaultOptions | 4.713 ms | 3 |
| InMemory | GroupByWithPagingOptions | 5.220 ms | 4 |
| Xml | GroupByWithPagingOptions | 5.283 ms | 5 |
| AdoNet | GroupByWithPagingOptions | 7.706 ms | 6 |
| EntityFramework | GroupByWithDefaultOptions | 8.904 ms | 7 |
| EntityFrameworkCore | GroupByWithPagingOptions | 9.062 ms | 8 |
| NHibernate | GroupByWithPagingOptions | 9.279 ms | 9 |
| EntityFrameworkCore | GroupByWithDefaultOptions | 9.485 ms | 10 |
| EntityFramework | GroupByWithPagingOptions | 9.837 ms | 11 |
| NHibernate | GroupByWithDefaultOptions | 11.535 ms | 12 |
| AdoNet | GroupByWithDefaultOptions | 13.441 ms | 13 |
| InMemory | Async_FindAllWithDefaultOptions | 3.500 ms | 1 |
| InMemory | Async_FindAllWithPredicate | 3.876 ms | 2 |
| InMemory | Async_FindAllWithPagingOptions | 4.327 ms | 3 |
| Json | Async_FindAllWithDefaultOptions | 4.434 ms | 4 |
| Xml | Async_FindAllWithDefaultOptions | 4.482 ms | 5 |
| Json | Async_FindAllWithPagingOptions | 4.720 ms | 6 |
| Xml | Async_FindAllWithPredicate | 4.872 ms | 7 |
| Json | Async_FindAllWithPredicate | 5.070 ms | 8 |
| Xml | Async_FindAllWithPagingOptions | 5.372 ms | 9 |
| AdoNet | Async_FindAllWithDefaultOptions | 5.397 ms | 9 |
| AdoNet | Async_FindAllWithPagingOptions | 5.651 ms | 10 |
| EntityFramework | Async_FindAllWithPredicate | 5.689 ms | 10 |
| EntityFramework | Async_FindAllWithPagingOptions | 5.998 ms | 11 |
| EntityFramework | Async_FindAllWithDefaultOptions | 6.134 ms | 12 |
| AdoNet | Async_FindAllWithPredicate | 9.171 ms | 13 |
| NHibernate | Async_FindAllWithPredicate | 10.033 ms | 14 |
| NHibernate | Async_FindAllWithDefaultOptions | 13.169 ms | 15 |
| NHibernate | Async_FindAllWithPagingOptions | 15.095 ms | 16 |
| EntityFrameworkCore | Async_FindAllWithPagingOptions | 17.518 ms | 17 |
| EntityFrameworkCore | Async_FindAllWithDefaultOptions | 20.465 ms | 18 |
| EntityFrameworkCore | Async_FindAllWithPredicate | 39.640 ms | 19 |
| InMemory | Async_GroupByWithPagingOptions | 3.761 ms | 1 |
| InMemory | Async_GroupByWithDefaultOptions | 3.792 ms | 1 |
| Xml | Async_GroupByWithDefaultOptions | 4.479 ms | 2 |
| Json | Async_GroupByWithPagingOptions | 4.556 ms | 3 |
| Json | Async_GroupByWithDefaultOptions | 4.838 ms | 4 |
| Xml | Async_GroupByWithPagingOptions | 4.875 ms | 4 |
| EntityFramework | Async_GroupByWithPagingOptions | 5.592 ms | 5 |
| AdoNet | Async_GroupByWithPagingOptions | 5.940 ms | 6 |
| EntityFramework | Async_GroupByWithDefaultOptions | 6.788 ms | 7 |
| NHibernate | Async_GroupByWithDefaultOptions | 9.352 ms | 8 |
| NHibernate | Async_GroupByWithPagingOptions | 9.384 ms | 8 |
| EntityFrameworkCore | Async_GroupByWithDefaultOptions | 10.593 ms | 9 |
| EntityFrameworkCore | Async_GroupByWithPagingOptions | 13.786 ms | 10 |
| AdoNet | Async_GroupByWithDefaultOptions | 15.265 ms | 11 |
| InMemory | Async_ToDictionaryWithDefaultOptions | 4.293 ms | 1 |
| InMemory | Async_ToDictionaryWithPagingOptions | 4.409 ms | 2 |
| Xml | Async_ToDictionaryWithDefaultOptions | 4.427 ms | 2 |
| Json | Async_ToDictionaryWithPagingOptions | 5.001 ms | 3 |
| Xml | Async_ToDictionaryWithPagingOptions | 5.162 ms | 4 |
| Json | Async_ToDictionaryWithDefaultOptions | 5.656 ms | 5 |
| AdoNet | Async_ToDictionaryWithPagingOptions | 5.826 ms | 6 |
| EntityFramework | Async_ToDictionaryWithPagingOptions | 7.841 ms | 7 |
| EntityFrameworkCore | Async_ToDictionaryWithPagingOptions | 10.102 ms | 8 |
| NHibernate | Async_ToDictionaryWithPagingOptions | 10.125 ms | 8 |
| NHibernate | Async_ToDictionaryWithDefaultOptions | 11.509 ms | 9 |
| EntityFramework | Async_ToDictionaryWithDefaultOptions | 18.055 ms | 10 |
| AdoNet | Async_ToDictionaryWithDefaultOptions | 20.043 ms | 11 |
| EntityFrameworkCore | Async_ToDictionaryWithDefaultOptions | 24.843 ms | 12 |
| NHibernate | FindWithDefaultOptions | NA | ? |
| NHibernate | FindWithPagingOptions | NA | ? |
| InMemory | FindWithId | 1.615 ms | 1 |
| InMemory | FindWithPredicate | 2.553 ms | 2 |
| Xml | FindWithId | 2.732 ms | 3 |
| InMemory | FindWithPagingOptions | 2.814 ms | 4 |
| Json | FindWithId | 2.946 ms | 5 |
| AdoNet | FindWithId | 3.038 ms | 6 |
| InMemory | FindWithDefaultOptions | 3.294 ms | 7 |
| EntityFramework | FindWithPagingOptions | 3.469 ms | 8 |
| EntityFramework | FindWithId | 3.670 ms | 9 |
| Json | FindWithPagingOptions | 3.704 ms | 9 |
| Json | FindWithDefaultOptions | 3.713 ms | 9 |
| Xml | FindWithDefaultOptions | 3.768 ms | 10 |
| AdoNet | FindWithPagingOptions | 3.788 ms | 10 |
| Xml | FindWithPredicate | 3.846 ms | 11 |
| Json | FindWithPredicate | 4.302 ms | 12 |
| EntityFrameworkCore | FindWithId | 5.018 ms | 13 |
| Xml | FindWithPagingOptions | 5.203 ms | 14 |
| AdoNet | FindWithDefaultOptions | 6.051 ms | 15 |
| EntityFramework | FindWithPredicate | 6.143 ms | 16 |
| EntityFrameworkCore | FindWithPagingOptions | 6.393 ms | 17 |
| NHibernate | FindWithId | 7.092 ms | 18 |
| NHibernate | FindWithPredicate | 11.587 ms | 19 |
| AdoNet | FindWithPredicate | 13.305 ms | 20 |
| EntityFramework | FindWithDefaultOptions | 25.229 ms | 21 |
| EntityFrameworkCore | FindWithPredicate | 43.060 ms | 22 |
| EntityFrameworkCore | FindWithDefaultOptions | 45.521 ms | 23 |
| NHibernate | Async_FindWithDefaultOptions | NA | ? |
| NHibernate | Async_FindWithPagingOptions | NA | ? |
| InMemory | Async_FindWithId | 1.074 ms | 1 |
| InMemory | Async_FindWithPagingOptions | 2.454 ms | 2 |
| InMemory | Async_FindWithDefaultOptions | 2.759 ms | 3 |
| Json | Async_FindWithId | 2.875 ms | 4 |
| Xml | Async_FindWithId | 2.980 ms | 5 |
| InMemory | Async_FindWithPredicate | 3.313 ms | 6 |
| EntityFramework | Async_FindWithId | 3.463 ms | 7 |
| Json | Async_FindWithPagingOptions | 3.791 ms | 8 |
| Xml | Async_FindWithPredicate | 3.951 ms | 9 |
| Xml | Async_FindWithPagingOptions | 4.069 ms | 10 |
| EntityFramework | Async_FindWithDefaultOptions | 4.071 ms | 10 |
| Json | Async_FindWithPredicate | 4.137 ms | 11 |
| Json | Async_FindWithDefaultOptions | 4.144 ms | 11 |
| Xml | Async_FindWithDefaultOptions | 4.153 ms | 11 |
| AdoNet | Async_FindWithId | 4.788 ms | 12 |
| NHibernate | Async_FindWithId | 5.540 ms | 13 |
| AdoNet | Async_FindWithPagingOptions | 5.579 ms | 13 |
| EntityFrameworkCore | Async_FindWithId | 5.879 ms | 14 |
| EntityFrameworkCore | Async_FindWithPagingOptions | 5.896 ms | 14 |
| EntityFramework | Async_FindWithPagingOptions | 5.938 ms | 14 |
| AdoNet | Async_FindWithDefaultOptions | 7.995 ms | 15 |
| NHibernate | Async_FindWithPredicate | 8.793 ms | 16 |
| EntityFrameworkCore | Async_FindWithPredicate | 14.515 ms | 17 |
| AdoNet | Async_FindWithPredicate | 15.652 ms | 18 |
| EntityFrameworkCore | Async_FindWithDefaultOptions | 16.082 ms | 19 |
| EntityFramework | Async_FindWithPredicate | 16.202 ms | 19 |
Benchmarks with issues: Repository_Find_Benchmarks.FindWithDefaultOptions: Dry(Force=True, Toolchain=InProcessToolchain, IterationCount=1, LaunchCount=1, RunStrategy=ColdStart, UnrollFactor=1, WarmupCount=1) [Provider=NHibernate] Repository_Find_Benchmarks.FindWithPagingOptions: Dry(Force=True, Toolchain=InProcessToolchain, IterationCount=1, LaunchCount=1, RunStrategy=ColdStart, UnrollFactor=1, WarmupCount=1) [Provider=NHibernate] Repository_Find_Benchmarks.Async_FindWithDefaultOptions: Dry(Force=True, Toolchain=InProcessToolchain, IterationCount=1, LaunchCount=1, RunStrategy=ColdStart, UnrollFactor=1, WarmupCount=1) [Provider=NHibernate] Repository_Find_Benchmarks.Async_FindWithPagingOptions: Dry(Force=True, Toolchain=InProcessToolchain, IterationCount=1, LaunchCount=1, RunStrategy=ColdStart, UnrollFactor=1, WarmupCount=1) [Provider=NHibernate]