Skip to content

Source generator performance regression #8631

@jjonescz

Description

@jjonescz

Running Razor compiler source generator benchmarks on #8614 reveals significant performance drop in incremental compilation - see results below. Not sure what to do about that. The best for performance would be introducing a breaking change and disallow declaring types in components visible in other components (which feels like a niche use case). Otherwise, I think we have to re-run at least the declaration codegen on all components whenever any other component is nontrivially updated which hurts incremental performance.

Against main

Release_Nuget is version 7.0.0-preview.23220.3:

Method Job BuildConfiguration Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
Cold_Compilation Baseline Release_Nuget 414.2 ms 3.47 ms 2.90 ms 1.00 0.00 5000.0000 2000.0000 123.98 MB 1.00
Cold_Compilation Current Release 499.8 ms 8.27 ms 6.45 ms 1.21 0.02 6000.0000 2000.0000 158.77 MB 1.28
Method Job BuildConfiguration Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
Razor_Add_Independent Baseline Release_Nuget 5.403 ms 0.0619 ms 0.0579 ms 1.00 0.00 46.8750 15.6250 1420.84 KB 1.00
Razor_Add_Independent Current Release 236.974 ms 3.3371 ms 3.1215 ms 43.86 0.70 3000.0000 1000.0000 77066.77 KB 54.24
Razor_Edit_Independent Baseline Release_Nuget 4.463 ms 0.0443 ms 0.0393 ms 1.00 0.00 54.6875 23.4375 1448.6 KB 1.00
Razor_Edit_Independent Current Release 236.156 ms 4.6105 ms 4.5281 ms 52.97 1.14 3000.0000 1000.0000 76217.38 KB 52.61
Razor_Remove_Independent Baseline Release_Nuget 1.678 ms 0.0251 ms 0.0235 ms 1.00 0.00 15.6250 3.9063 393.82 KB 1.00
Razor_Remove_Independent Current Release 229.719 ms 2.3080 ms 1.9273 ms 137.10 2.09 3000.0000 1000.0000 74589.75 KB 189.40
Razor_Edit_DependentIgnorable Baseline Release_Nuget 3.392 ms 0.0572 ms 0.0535 ms 1.00 0.00 39.0625 15.6250 1079.27 KB 1.00
Razor_Edit_DependentIgnorable Current Release 3.405 ms 0.0673 ms 0.0691 ms 1.00 0.03 39.0625 15.6250 1070.99 KB 0.99
Razor_Edit_Dependent Baseline Release_Nuget 6.347 ms 0.0962 ms 0.0899 ms 1.00 0.00 62.5000 15.6250 1618.46 KB 1.00
Razor_Edit_Dependent Current Release 239.355 ms 3.0092 ms 2.6676 ms 37.74 0.51 3000.0000 1000.0000 76289.7 KB 47.14
Razor_Remove_Dependent Baseline Release_Nuget 1.605 ms 0.0080 ms 0.0063 ms 1.00 0.00 15.6250 3.9063 393.83 KB 1.00
Razor_Remove_Dependent Current Release 236.776 ms 4.3496 ms 3.6321 ms 147.15 2.04 3000.0000 1000.0000 74560.55 KB 189.32

Against older version

Release_Nuget is (currently the default) version 7.0.0-preview.5.22528.1:

Method Job BuildConfiguration Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
Cold_Compilation Baseline Release_Nuget 312.8 ms 6.11 ms 7.95 ms 1.00 0.00 4000.0000 1000.0000 105.7 MB 1.00
Cold_Compilation Current Release 513.1 ms 4.79 ms 4.24 ms 1.64 0.04 6000.0000 2000.0000 166.58 MB 1.58
Method Job BuildConfiguration Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
Razor_Add_Independent Baseline Release_Nuget 109.603 ms 0.4651 ms 0.3884 ms 1.00 0.00 1333.3333 333.3333 40862.68 KB 1.00
Razor_Add_Independent Current Release 233.335 ms 3.3526 ms 3.1360 ms 2.13 0.03 3000.0000 1000.0000 77063.71 KB 1.89
Razor_Edit_Independent Baseline Release_Nuget 11.020 ms 0.1788 ms 0.1672 ms 1.00 0.00 140.6250 31.2500 3761.98 KB 1.00
Razor_Edit_Independent Current Release 227.030 ms 1.7724 ms 1.5712 ms 20.61 0.37 3000.0000 1000.0000 76209.41 KB 20.26
Razor_Remove_Independent Baseline Release_Nuget 107.552 ms 1.2908 ms 1.0778 ms 1.00 0.00 1333.3333 333.3333 39871.72 KB 1.00
Razor_Remove_Independent Current Release 235.619 ms 4.5596 ms 9.4163 ms 2.20 0.08 3000.0000 1000.0000 74564.09 KB 1.87
Razor_Edit_DependentIgnorable Baseline Release_Nuget 2.503 ms 0.0282 ms 0.0264 ms 1.00 0.00 35.1563 11.7188 915.28 KB 1.00
Razor_Edit_DependentIgnorable Current Release 3.305 ms 0.0202 ms 0.0169 ms 1.32 0.02 39.0625 15.6250 1076.15 KB 1.18
Razor_Edit_Dependent Baseline Release_Nuget 110.511 ms 1.7171 ms 1.6061 ms 1.00 0.00 1333.3333 333.3333 40566.99 KB 1.00
Razor_Edit_Dependent Current Release 231.464 ms 2.7982 ms 2.6174 ms 2.09 0.03 3000.0000 1000.0000 76335.98 KB 1.88
Razor_Remove_Dependent Baseline Release_Nuget 106.997 ms 0.3375 ms 0.2635 ms 1.00 0.00 1500.0000 250.0000 39753.2 KB 1.00
Razor_Remove_Dependent Current Release 227.821 ms 2.2253 ms 1.9727 ms 2.13 0.02 3000.0000 1000.0000 74568.98 KB 1.88

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions