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.