Use dictionary to track PackageRelationships instead of searching a list by twsouthwick · Pull Request #35978 · dotnet/runtime (original) (raw)
I ran some performance tests locally and see the following:
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.208 (2004/?/20H1)
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=3.1.300-preview-015135
[Host] : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT
.NET Core 3.1 : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT
Job=.NET Core 3.1 Runtime=.NET Core 3.1
Before:
| Method | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|-------------------- |------ |---------------:|---------------:|---------------:|---------:|---------:|---------:|-----------:|
| AddRelationships | 10 | 22.388 us | 0.3962 us | 0.3706 us | 3.2043 | 0.0610 | - | 26.36 KB |
| DeleteRelationships | 10 | 8.259 us | 0.1173 us | 0.1098 us | 0.8087 | 0.0153 | - | 6.63 KB |
| GetRelationship | 10 | 24.192 us | 0.3770 us | 0.3526 us | 3.2959 | 0.1526 | - | 27.1 KB |
| AddRelationships | 100 | 147.637 us | 1.5472 us | 1.3716 us | 9.2773 | 0.7324 | - | 76.62 KB |
| DeleteRelationships | 100 | 95.864 us | 1.2001 us | 1.1226 us | 5.3711 | 0.7324 | - | 44.44 KB |
| GetRelationship | 100 | 186.724 us | 2.8160 us | 2.4963 us | 10.2539 | 1.7090 | - | 83.82 KB |
| AddRelationships | 1000 | 3,691.527 us | 33.1561 us | 25.8861 us | 85.9375 | 85.9375 | 85.9375 | 767.22 KB |
| DeleteRelationships | 1000 | 3,302.878 us | 64.8696 us | 60.6791 us | 50.7813 | 23.4375 | - | 418.06 KB |
| GetRelationship | 1000 | 6,626.254 us | 96.2316 us | 85.3068 us | 85.9375 | 85.9375 | 85.9375 | 838.66 KB |
| AddRelationships | 10000 | 300,256.640 us | 5,678.6663 us | 5,311.8280 us | 500.0000 | 500.0000 | 500.0000 | 6859.76 KB |
| DeleteRelationships | 10000 | 299,635.808 us | 5,785.9288 us | 6,190.8790 us | - | - | - | 4197.49 KB |
| GetRelationship | 10000 | 589,829.177 us | 11,474.4863 us | 15,706.4063 us | - | - | - | 7517.03 KB |
After:
| Method | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|-------------------- |------ |--------------:|------------:|------------:|----------:|---------:|---------:|-----------:|
| AddRelationships | 10 | 22.780 us | 0.3742 us | 0.3675 us | 3.3264 | 0.1221 | - | 27.42 KB |
| DeleteRelationships | 10 | 9.362 us | 0.1550 us | 0.1374 us | 0.9308 | 0.0153 | - | 7.67 KB |
| GetRelationship | 10 | 24.421 us | 0.3950 us | 0.3298 us | 3.4180 | 0.1221 | - | 28.16 KB |
| AddRelationships | 100 | 128.471 us | 1.6193 us | 1.4355 us | 10.7422 | 0.9766 | - | 89.06 KB |
| DeleteRelationships | 100 | 80.366 us | 1.5709 us | 1.6132 us | 6.9580 | 1.2207 | - | 56.87 KB |
| GetRelationship | 100 | 145.800 us | 2.7884 us | 2.8635 us | 11.7188 | 2.1973 | - | 96.26 KB |
| AddRelationships | 1000 | 1,421.037 us | 28.0402 us | 41.1010 us | 89.8438 | 89.8438 | 89.8438 | 897.64 KB |
| DeleteRelationships | 1000 | 833.369 us | 16.0594 us | 20.8817 us | 66.4063 | 33.2031 | - | 548.47 KB |
| GetRelationship | 1000 | 1,445.370 us | 14.9881 us | 14.0199 us | 89.8438 | 89.8438 | 89.8438 | 969.08 KB |
| AddRelationships | 10000 | 13,337.722 us | 253.3764 us | 248.8495 us | 984.3750 | 984.3750 | 984.3750 | 7992.07 KB |
| DeleteRelationships | 10000 | 10,424.963 us | 122.3309 us | 114.4284 us | 656.2500 | 328.1250 | 328.1250 | 5329.43 KB |
| GetRelationship | 10000 | 23,163.040 us | 381.3055 us | 356.6734 us | 1468.7500 | 968.7500 | 968.7500 | 8650.7 KB |
Not sure where to add performance tests to the repo. Unit tests already cover the functional side of things.