Improve performance of XML doc inference
Summary of the changes (Less than 80 chars)
- Improved performance of XML docs inference by approximately 3.5, while using only about a third of the previous memory allocation.
- Ensured thread safety and prevented the modification of (cached) values that are retrieved from the XmlDocumentationFileResolver
Related to #8775 (in this specific format)
As discussed in #8775, the current implementation was quite slow. I intentionally did not introduce any big conceptual changes (yet) and focused only on optimizing the current implementation.
According to the benchmarks below, the general performance has improved by a factor between 2 and 22 (without the inheritdoc-cases, see below for them) - on average around 3.5× faster - while memory usage has been reduced significantly to around a third.
For inheritdoc-cases, the situation is a bit different: I discovered that the current implementation mutates the XElement instances retrieved from the XmlDocumentationFileResolver, effectively modifying its internal cache.
Here : https://github.com/ChilliCream/graphql-platform/blob/dfe075c791bf3fe181707c09e47db112515840e8/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/XmlDocumentationProvider.cs#L320-L321
and here: https://github.com/ChilliCream/graphql-platform/blob/dfe075c791bf3fe181707c09e47db112515840e8/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/XmlDocumentationProvider.cs#L353-L354
This behavior is both undesired (at least I think so) and not thread-safe.
To fix this, I changed the logic to create a copy of the XElement when resolving inheritdoc elements. This ensures that the cache remains intact and that the implementation is thread-safe. While this introduces a small performance regression for two out of six inheritdoc cases, I think it is justified since the previous implementation was incorrect and should not be considered a valid baseline: It only replaced the inheritdoc element once within the cached(!) XDocument, meaning that all subsequent calls for the same(!!!) member (which happens all the time in the benchmark) did not need to replace it again and threfore resulting in slightly better, but ultimately incomparable, performance characteristics. Of course, the current behavior could indeed be beneficial at runtime as well, f. e. an interface with many inheritors, but it is not that common as the benchmark indicates.
Overall, even for the inheritdoc-cases, the performance is still improved or comparable to before, and the memory usage is significantly lower:
| Method | N | Mean | Allocated | Speedup-ratio (old / new) | Allocation-ratio (old / new) |
|---|---|---|---|---|---|
| When_parameter_has_inheritdoc_then_it_is_resolved | 100000 | 388,008.333 μs | 570331.98 KB | 1,59 | 2,72 |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 100000 | 617,516.067 μs | 1553967.3 KB | ||
| When_method_has_inheritdoc_then_it_is_resolved | 100000 | 388,327.700 μs | 558612.99 KB | 0,99 | 1,45 |
| When_method_has_inheritdoc_then_it_is_resolved_old | 100000 | 383,935.267 μs | 807847.27 KB | ||
| When_property_has_inheritdoc_then_it_is_resolved | 100000 | 356,269.400 μs | 509393.12 KB | 0,95 | 1,46 |
| When_property_has_inheritdoc_then_it_is_resolved_old | 100000 | 337,054.233 μs | 745313.59 KB | ||
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 282,278.533 μs | 387682.23 KB | 2,26 | 4,15 |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 638,184.767 μs | 1607092.24 KB | ||
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 258,612.633 μs | 347811.74 KB | 1,36 | 2,25 |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 351,675.700 μs | 782032.15 KB | ||
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 100000 | 282,699.200 μs | 376734.66 KB | 1,36 | 2,25 |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 100000 | 385,172.367 μs | 835188.57 KB |
Note: The PR currently includes the benchmark code so that one can reproduce the results. I would to remove these benchmarks after the review and applying any suggested change.
Note further: This is a breaking change since I reworked XmlDocumentationFileResolver to become XmlDocumentationResolver.
This change is not strictly neccessary, but IIRC it was a 10-20% speed boost - I will reevaluate the concret impact on request if the change seems unlikely to be acceptable.
Full benchmarks:
BenchmarkDotNet v0.15.4, Windows 11 (10.0.26100.6584/24H2/2024Update/HudsonValley)
AMD Ryzen 7 7840HS with Radeon 780M Graphics 3.80GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.203
[Host] : .NET 9.0.8 (9.0.8, 9.0.825.36511), X64 RyuJIT x86-64-v4
ShortRun : .NET 9.0.8 (9.0.8, 9.0.825.36511), X64 RyuJIT x86-64-v4
Job=ShortRun IterationCount=3 LaunchCount=1
WarmupCount=3
| Method | N | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
|---|---|---|---|---|---|---|---|
| When_xml_doc_is_missing_then_description_is_empty | 100000 | 120,859.507 μs | 12,137.4212 μs | 665.2930 μs | 14200.0000 | - | 116406.25 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 100000 | 2,725,580.867 μs | 281,667.2610 μs | 15,439.1331 μs | 57000.0000 | - | 472656.25 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 100000 | 172,524.667 μs | 18,470.1591 μs | 1,012.4117 μs | 58500.0000 | - | 480469.29 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 100000 | 601,319.133 μs | 290,051.4265 μs | 15,898.6975 μs | 173000.0000 | 1000.0000 | 1420313.57 KB |
| When_description_has_see_tag_then_it_is_converted | 100000 | 187,286.600 μs | 94,192.6960 μs | 5,163.0195 μs | 36000.0000 | - | 296096.94 KB |
| When_description_has_see_tag_then_it_is_converted_old | 100000 | 681,088.633 μs | 317,488.1082 μs | 17,402.5946 μs | 153000.0000 | 1000.0000 | 1254688.56 KB |
| When_description_has_paramref_tag_then_it_is_converted | 100000 | 144,636.917 μs | 34,561.3856 μs | 1,894.4262 μs | 29000.0000 | - | 239069.42 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 100000 | 617,923.267 μs | 48,661.9208 μs | 2,667.3241 μs | 145000.0000 | 1000.0000 | 1184420.41 KB |
| When_description_has_generic_tags_then_it_is_converted | 100000 | 121,884.083 μs | 19,649.2068 μs | 1,077.0393 μs | 20000.0000 | - | 164844.29 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 100000 | 567,797.267 μs | 219,565.4140 μs | 12,035.1213 μs | 126000.0000 | 1000.0000 | 1032032.33 KB |
| When_type_has_description_then_it_it_resolved | 100000 | 129,652.500 μs | 56,766.0772 μs | 3,111.5403 μs | 27000.0000 | - | 221882.3 KB |
| When_type_has_description_then_it_it_resolved_old | 100000 | 279,065.700 μs | 137,640.5074 μs | 7,544.5407 μs | 86000.0000 | - | 707054.36 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 100000 | 128,535.333 μs | 18,932.1295 μs | 1,037.7339 μs | 27000.0000 | - | 221882.3 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 100000 | 278,688.933 μs | 190,098.9362 μs | 10,419.9642 μs | 86000.0000 | - | 707054.36 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 100000 | 388,008.333 μs | 121,439.9351 μs | 6,656.5327 μs | 69000.0000 | - | 570331.98 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 100000 | 617,516.067 μs | 189,819.8929 μs | 10,404.6689 μs | 190000.0000 | 2000.0000 | 1553967.3 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 100000 | 388,327.700 μs | 135,499.2838 μs | 7,427.1730 μs | 68000.0000 | - | 558612.99 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 100000 | 383,935.267 μs | 188,689.0892 μs | 10,342.6857 μs | 98000.0000 | - | 807847.27 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 100000 | 356,269.400 μs | 102,935.1776 μs | 5,642.2244 μs | 62000.0000 | - | 509393.12 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 100000 | 337,054.233 μs | 63,085.0747 μs | 3,457.9058 μs | 91000.0000 | - | 745313.59 KB |
| When_type_is_an_interface_then_description_is_resolved | 100000 | 128,561.883 μs | 16,491.3307 μs | 903.9455 μs | 26500.0000 | - | 217194.88 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 100000 | 427,854.733 μs | 201,584.9437 μs | 11,049.5510 μs | 108000.0000 | - | 887529.8 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 282,278.533 μs | 117,860.3894 μs | 6,460.3257 μs | 47000.0000 | - | 387682.23 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 638,184.767 μs | 264,927.5888 μs | 14,521.5752 μs | 196000.0000 | 2000.0000 | 1607092.24 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 258,612.633 μs | 14,135.8916 μs | 774.8359 μs | 42000.0000 | - | 347811.74 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 351,675.700 μs | 132,374.2876 μs | 7,255.8814 μs | 95000.0000 | - | 782032.15 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 100000 | 282,699.200 μs | 29,497.1756 μs | 1,616.8397 μs | 46000.0000 | - | 376734.66 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 100000 | 385,172.367 μs | 155,013.5693 μs | 8,496.8168 μs | 102000.0000 | 1000.0000 | 835188.57 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 100000 | 132,875.200 μs | 3,960.2381 μs | 217.0740 μs | 27000.0000 | - | 223439.33 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 100000 | 376,766.867 μs | 148,048.4219 μs | 8,115.0336 μs | 104000.0000 | - | 850782.16 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 100000 | 142,962.417 μs | 8,209.5160 μs | 449.9913 μs | 28000.0000 | - | 228912.52 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 100000 | 424,184.900 μs | 69,537.9853 μs | 3,811.6116 μs | 111000.0000 | - | 908628.83 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 100000 | 115,625.983 μs | 2,306.2521 μs | 126.4135 μs | 22000.0000 | - | 179692.56 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 100000 | 687,318.967 μs | 254,192.5425 μs | 13,933.1510 μs | 204000.0000 | 2000.0000 | 1668032.2 KB |
| When_class_has_description_then_it_is_converted | 100000 | 131,622.650 μs | 72,629.1065 μs | 3,981.0464 μs | 29000.0000 | - | 240633.07 KB |
| When_class_has_description_then_it_is_converted_old | 100000 | 395,235.800 μs | 167,555.4996 μs | 9,184.2824 μs | 107000.0000 | - | 878154.53 KB |
| When_method_has_exceptions_then_it_is_converted | 100000 | 190,465.100 μs | 37,521.0015 μs | 2,056.6527 μs | 55000.0000 | - | 453126.59 KB |
| When_method_has_exceptions_then_it_is_converted_old | 100000 | 603,740.767 μs | 255,448.2207 μs | 14,001.9790 μs | 169000.0000 | 1000.0000 | 1385939.09 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 100000 | 186,864.533 μs | 43,580.8893 μs | 2,388.8156 μs | 55000.0000 | - | 453126.59 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 100000 | 622,202.433 μs | 138,360.9529 μs | 7,584.0307 μs | 171000.0000 | 1000.0000 | 1398466.98 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 100000 | 170,212.083 μs | 45,516.4586 μs | 2,494.9107 μs | 46500.0000 | - | 380469.55 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 100000 | 589,140.633 μs | 154,792.2254 μs | 8,484.6842 μs | 159000.0000 | 1000.0000 | 1300001.59 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 100000 | 169,057.350 μs | 85,439.5459 μs | 4,683.2298 μs | 46500.0000 | - | 381250.4 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 100000 | 605,887.400 μs | 56,193.7587 μs | 3,080.1695 μs | 164000.0000 | 1000.0000 | 1339845.36 KB |
| When_method_has_returns_then_it_is_converted | 100000 | 169,595.600 μs | 47,079.1826 μs | 2,580.5689 μs | 46500.0000 | - | 380469.54 KB |
| When_method_has_returns_then_it_is_converted_old | 100000 | 632,316.367 μs | 102,954.8414 μs | 5,643.3023 μs | 168000.0000 | 1000.0000 | 1372657.04 KB |
| When_method_has_no_returns_then_it_is_ignored | 100000 | 154,807.650 μs | 37,693.7802 μs | 2,066.1233 μs | 43000.0000 | - | 353126.59 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 100000 | 601,431.833 μs | 166,151.8528 μs | 9,107.3437 μs | 155000.0000 | 1000.0000 | 1270313.3 KB |
| When_method_has_dictionary_args_then_it_is_found | 100000 | 214,225.067 μs | 48,084.7327 μs | 2,635.6865 μs | 57000.0000 | - | 468009.09 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 100000 | 698,113.633 μs | 123,243.0853 μs | 6,755.3694 μs | 146000.0000 | 1000.0000 | 1196990.77 KB |
Full benchmark (values basically scale linearly)
BenchmarkDotNet v0.15.4, Windows 11 (10.0.26100.6584/24H2/2024Update/HudsonValley)
AMD Ryzen 7 7840HS with Radeon 780M Graphics 3.80GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.203
[Host] : .NET 9.0.8 (9.0.8, 9.0.825.36511), X64 RyuJIT x86-64-v4
ShortRun : .NET 9.0.8 (9.0.8, 9.0.825.36511), X64 RyuJIT x86-64-v4
Job=ShortRun IterationCount=3 LaunchCount=1
WarmupCount=3
| Method | N | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
|---|---|---|---|---|---|---|---|
| When_xml_doc_is_missing_then_description_is_empty | 1 | 1.278 μs | 0.3382 μs | 0.0185 μs | 0.1411 | - | 1.16 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 1 | 28.005 μs | 1.0727 μs | 0.0588 μs | 0.5493 | - | 4.73 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 1 | 1.743 μs | 0.0819 μs | 0.0045 μs | 0.5875 | 0.0019 | 4.8 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 1 | 7.265 μs | 7.5341 μs | 0.4130 μs | 1.7090 | - | 14.2 KB |
| When_description_has_see_tag_then_it_is_converted | 1 | 1.862 μs | 0.4002 μs | 0.0219 μs | 0.3624 | - | 2.96 KB |
| When_description_has_see_tag_then_it_is_converted_old | 1 | 8.186 μs | 10.1202 μs | 0.5547 μs | 1.5259 | - | 12.55 KB |
| When_description_has_paramref_tag_then_it_is_converted | 1 | 1.481 μs | 0.2682 μs | 0.0147 μs | 0.2918 | - | 2.39 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 1 | 7.537 μs | 5.5594 μs | 0.3047 μs | 1.4038 | - | 11.84 KB |
| When_description_has_generic_tags_then_it_is_converted | 1 | 1.219 μs | 0.0694 μs | 0.0038 μs | 0.2003 | - | 1.65 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 1 | 6.880 μs | 2.7616 μs | 0.1514 μs | 1.2207 | - | 10.32 KB |
| When_type_has_description_then_it_it_resolved | 1 | 1.312 μs | 0.3314 μs | 0.0182 μs | 0.2708 | - | 2.22 KB |
| When_type_has_description_then_it_it_resolved_old | 1 | 2.783 μs | 1.1985 μs | 0.0657 μs | 0.8545 | - | 7.07 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 1 | 1.292 μs | 0.4270 μs | 0.0234 μs | 0.2708 | - | 2.22 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 1 | 2.830 μs | 0.8848 μs | 0.0485 μs | 0.8545 | - | 7.07 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 1 | 3.842 μs | 0.7693 μs | 0.0422 μs | 0.6981 | - | 5.7 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 1 | 6.108 μs | 2.0084 μs | 0.1101 μs | 1.8921 | - | 15.54 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 1 | 3.898 μs | 0.6515 μs | 0.0357 μs | 0.6790 | - | 5.59 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 1 | 3.810 μs | 3.3380 μs | 0.1830 μs | 0.9766 | - | 8.08 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 1 | 3.474 μs | 0.6427 μs | 0.0352 μs | 0.6218 | - | 5.09 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 1 | 3.361 μs | 0.9256 μs | 0.0507 μs | 0.9003 | - | 7.45 KB |
| When_type_is_an_interface_then_description_is_resolved | 1 | 1.286 μs | 0.4013 μs | 0.0220 μs | 0.2651 | - | 2.17 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 1 | 4.284 μs | 1.1194 μs | 0.0614 μs | 1.0681 | - | 8.88 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 1 | 2.745 μs | 0.7606 μs | 0.0417 μs | 0.4730 | - | 3.88 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 1 | 6.565 μs | 3.7209 μs | 0.2040 μs | 1.9531 | - | 16.07 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 1 | 2.546 μs | 0.5457 μs | 0.0299 μs | 0.4196 | - | 3.48 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 1 | 3.586 μs | 0.4598 μs | 0.0252 μs | 0.9460 | - | 7.82 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 1 | 2.789 μs | 0.8873 μs | 0.0486 μs | 0.4578 | - | 3.77 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 1 | 4.512 μs | 5.0429 μs | 0.2764 μs | 1.0071 | - | 8.35 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 1 | 1.339 μs | 0.4866 μs | 0.0267 μs | 0.2728 | - | 2.23 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 1 | 3.985 μs | 4.7313 μs | 0.2593 μs | 1.0376 | - | 8.51 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 1 | 1.406 μs | 0.2095 μs | 0.0115 μs | 0.2785 | - | 2.29 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 1 | 4.404 μs | 0.9329 μs | 0.0511 μs | 1.0986 | - | 9.09 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 1 | 1.195 μs | 0.1137 μs | 0.0062 μs | 0.2193 | - | 1.8 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 1 | 6.900 μs | 3.4658 μs | 0.1900 μs | 2.0142 | - | 16.68 KB |
| When_class_has_description_then_it_is_converted | 1 | 1.281 μs | 0.3172 μs | 0.0174 μs | 0.2937 | - | 2.41 KB |
| When_class_has_description_then_it_is_converted_old | 1 | 4.397 μs | 11.6379 μs | 0.6379 μs | 1.0681 | - | 8.78 KB |
| When_method_has_exceptions_then_it_is_converted | 1 | 1.866 μs | 0.6918 μs | 0.0379 μs | 0.5531 | 0.0019 | 4.53 KB |
| When_method_has_exceptions_then_it_is_converted_old | 1 | 6.569 μs | 1.9303 μs | 0.1058 μs | 1.6479 | - | 13.86 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 1 | 1.899 μs | 0.7583 μs | 0.0416 μs | 0.5531 | 0.0019 | 4.53 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 1 | 6.744 μs | 4.3514 μs | 0.2385 μs | 1.7090 | - | 13.98 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 1 | 1.752 μs | 0.0581 μs | 0.0032 μs | 0.4654 | - | 3.8 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 1 | 6.658 μs | 10.0576 μs | 0.5513 μs | 1.5869 | - | 13 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 1 | 1.630 μs | 0.3700 μs | 0.0203 μs | 0.4654 | - | 3.81 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 1 | 6.674 μs | 3.5672 μs | 0.1955 μs | 1.5869 | - | 13.4 KB |
| When_method_has_returns_then_it_is_converted | 1 | 1.655 μs | 0.1566 μs | 0.0086 μs | 0.4654 | - | 3.8 KB |
| When_method_has_returns_then_it_is_converted_old | 1 | 7.487 μs | 6.5168 μs | 0.3572 μs | 1.6479 | - | 13.73 KB |
| When_method_has_no_returns_then_it_is_ignored | 1 | 1.546 μs | 0.5643 μs | 0.0309 μs | 0.4311 | - | 3.53 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 1 | 7.123 μs | 16.9119 μs | 0.9270 μs | 1.5259 | - | 12.7 KB |
| When_method_has_dictionary_args_then_it_is_found | 1 | 2.114 μs | 0.9493 μs | 0.0520 μs | 0.5722 | - | 4.68 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 1 | 7.848 μs | 6.2037 μs | 0.3400 μs | 1.4648 | - | 11.97 KB |
| When_xml_doc_is_missing_then_description_is_empty | 10 | 12.264 μs | 1.2664 μs | 0.0694 μs | 1.4191 | - | 11.64 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 10 | 272.441 μs | 40.2707 μs | 2.2074 μs | 5.3711 | - | 47.27 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 10 | 16.915 μs | 2.7488 μs | 0.1507 μs | 5.8594 | - | 48.05 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 10 | 65.485 μs | 69.9894 μs | 3.8364 μs | 17.0898 | - | 142.03 KB |
| When_description_has_see_tag_then_it_is_converted | 10 | 18.249 μs | 4.7020 μs | 0.2577 μs | 3.6011 | - | 29.61 KB |
| When_description_has_see_tag_then_it_is_converted_old | 10 | 72.113 μs | 65.0686 μs | 3.5666 μs | 15.1367 | - | 125.47 KB |
| When_description_has_paramref_tag_then_it_is_converted | 10 | 14.559 μs | 3.5506 μs | 0.1946 μs | 2.9144 | - | 23.91 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 10 | 63.883 μs | 41.5483 μs | 2.2774 μs | 14.1602 | - | 118.44 KB |
| When_description_has_generic_tags_then_it_is_converted | 10 | 12.466 μs | 3.0116 μs | 0.1651 μs | 2.0142 | - | 16.48 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 10 | 59.001 μs | 30.1048 μs | 1.6501 μs | 12.2070 | - | 103.2 KB |
| When_type_has_description_then_it_it_resolved | 10 | 13.096 μs | 3.7606 μs | 0.2061 μs | 2.7161 | - | 22.19 KB |
| When_type_has_description_then_it_it_resolved_old | 10 | 28.376 μs | 6.5746 μs | 0.3604 μs | 8.5449 | - | 70.71 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 10 | 13.064 μs | 1.5480 μs | 0.0849 μs | 2.7161 | - | 22.19 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 10 | 28.276 μs | 3.4170 μs | 0.1873 μs | 8.5449 | - | 70.71 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 10 | 38.984 μs | 8.0713 μs | 0.4424 μs | 6.9580 | - | 57.03 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 10 | 66.398 μs | 62.5559 μs | 3.4289 μs | 18.5547 | - | 155.4 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 10 | 38.544 μs | 6.3888 μs | 0.3502 μs | 6.8359 | - | 55.86 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 10 | 38.840 μs | 43.3834 μs | 2.3780 μs | 9.7656 | - | 80.79 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 10 | 35.433 μs | 3.5433 μs | 0.1942 μs | 6.2256 | - | 50.94 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 10 | 36.249 μs | 54.1774 μs | 2.9696 μs | 9.0332 | - | 74.53 KB |
| When_type_is_an_interface_then_description_is_resolved | 10 | 12.903 μs | 2.8252 μs | 0.1549 μs | 2.6550 | - | 21.72 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 10 | 43.321 μs | 4.6740 μs | 0.2562 μs | 10.7422 | - | 88.75 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 10 | 28.065 μs | 6.8502 μs | 0.3755 μs | 4.6997 | - | 38.77 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 10 | 70.691 μs | 169.2421 μs | 9.2767 μs | 19.5313 | - | 160.71 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 10 | 26.027 μs | 4.2597 μs | 0.2335 μs | 4.2114 | - | 34.78 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 10 | 38.068 μs | 15.1533 μs | 0.8306 μs | 9.5215 | - | 78.2 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 10 | 27.975 μs | 6.0688 μs | 0.3326 μs | 4.5776 | - | 37.67 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 10 | 41.168 μs | 20.2034 μs | 1.1074 μs | 10.0098 | - | 83.52 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 10 | 13.217 μs | 3.4182 μs | 0.1874 μs | 2.7313 | - | 22.34 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 10 | 39.482 μs | 59.6570 μs | 3.2700 μs | 10.2539 | - | 85.08 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 10 | 14.117 μs | 2.1594 μs | 0.1184 μs | 2.7924 | - | 22.89 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 10 | 42.349 μs | 4.0647 μs | 0.2228 μs | 10.9863 | - | 90.86 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 10 | 11.605 μs | 1.5245 μs | 0.0836 μs | 2.1973 | - | 17.97 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 10 | 67.263 μs | 20.3147 μs | 1.1135 μs | 20.0195 | - | 166.8 KB |
| When_class_has_description_then_it_is_converted | 10 | 12.998 μs | 4.0867 μs | 0.2240 μs | 2.9449 | - | 24.06 KB |
| When_class_has_description_then_it_is_converted_old | 10 | 40.887 μs | 31.2488 μs | 1.7129 μs | 10.7422 | - | 87.82 KB |
| When_method_has_exceptions_then_it_is_converted | 10 | 18.693 μs | 11.4164 μs | 0.6258 μs | 5.5237 | - | 45.31 KB |
| When_method_has_exceptions_then_it_is_converted_old | 10 | 66.329 μs | 14.3529 μs | 0.7867 μs | 16.6016 | - | 138.59 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 10 | 18.941 μs | 7.8576 μs | 0.4307 μs | 5.5237 | - | 45.31 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 10 | 64.694 μs | 26.6577 μs | 1.4612 μs | 17.0898 | - | 139.84 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 10 | 16.942 μs | 2.8374 μs | 0.1555 μs | 4.6387 | - | 38.05 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 10 | 61.537 μs | 30.7198 μs | 1.6839 μs | 15.6250 | - | 130 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 10 | 16.481 μs | 6.7329 μs | 0.3691 μs | 4.6387 | - | 38.13 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 10 | 62.004 μs | 10.6008 μs | 0.5811 μs | 16.1133 | - | 133.99 KB |
| When_method_has_returns_then_it_is_converted | 10 | 17.009 μs | 0.7520 μs | 0.0412 μs | 4.6387 | - | 38.05 KB |
| When_method_has_returns_then_it_is_converted_old | 10 | 63.558 μs | 21.0019 μs | 1.1512 μs | 16.6016 | - | 137.27 KB |
| When_method_has_no_returns_then_it_is_ignored | 10 | 15.257 μs | 5.3464 μs | 0.2931 μs | 4.3182 | - | 35.31 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 10 | 64.045 μs | 97.9953 μs | 5.3715 μs | 15.1367 | - | 127.03 KB |
| When_method_has_dictionary_args_then_it_is_found | 10 | 21.078 μs | 8.0380 μs | 0.4406 μs | 5.7068 | - | 46.8 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 10 | 69.309 μs | 9.6364 μs | 0.5282 μs | 14.6484 | - | 119.7 KB |
| When_xml_doc_is_missing_then_description_is_empty | 100 | 123.573 μs | 21.8380 μs | 1.1970 μs | 14.1602 | - | 116.41 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 100 | 2,709.056 μs | 182.6845 μs | 10.0136 μs | 54.6875 | - | 472.66 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 100 | 174.405 μs | 71.3472 μs | 3.9108 μs | 58.5938 | - | 480.47 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 100 | 617.493 μs | 638.9419 μs | 35.0226 μs | 171.8750 | - | 1420.32 KB |
| When_description_has_see_tag_then_it_is_converted | 100 | 188.720 μs | 81.2646 μs | 4.4544 μs | 36.1328 | - | 296.1 KB |
| When_description_has_see_tag_then_it_is_converted_old | 100 | 688.701 μs | 517.0283 μs | 28.3401 μs | 152.3438 | - | 1254.69 KB |
| When_description_has_paramref_tag_then_it_is_converted | 100 | 150.843 μs | 36.6805 μs | 2.0106 μs | 29.0527 | - | 239.07 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 100 | 639.430 μs | 225.5160 μs | 12.3613 μs | 144.5313 | - | 1184.42 KB |
| When_description_has_generic_tags_then_it_is_converted | 100 | 122.389 μs | 25.9355 μs | 1.4216 μs | 20.1416 | - | 164.84 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 100 | 577.500 μs | 570.6253 μs | 31.2779 μs | 125.0000 | - | 1032.04 KB |
| When_type_has_description_then_it_it_resolved | 100 | 131.467 μs | 49.1514 μs | 2.6942 μs | 26.8555 | - | 221.88 KB |
| When_type_has_description_then_it_it_resolved_old | 100 | 279.570 μs | 121.6684 μs | 6.6691 μs | 85.9375 | - | 707.05 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 100 | 132.162 μs | 39.8116 μs | 2.1822 μs | 26.8555 | - | 221.88 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 100 | 276.619 μs | 81.9527 μs | 4.4921 μs | 85.9375 | - | 707.05 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 100 | 385.297 μs | 27.6373 μs | 1.5149 μs | 69.8242 | - | 570.33 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 100 | 617.044 μs | 316.8514 μs | 17.3677 μs | 187.5000 | - | 1553.97 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 100 | 385.640 μs | 81.6152 μs | 4.4736 μs | 68.3594 | - | 558.61 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 100 | 382.733 μs | 266.6932 μs | 14.6184 μs | 97.6563 | - | 807.85 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 100 | 350.921 μs | 41.1027 μs | 2.2530 μs | 62.0117 | - | 509.38 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 100 | 346.274 μs | 179.3978 μs | 9.8334 μs | 89.8438 | - | 745.31 KB |
| When_type_is_an_interface_then_description_is_resolved | 100 | 129.260 μs | 14.0734 μs | 0.7714 μs | 26.3672 | - | 217.2 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 100 | 503.904 μs | 759.3631 μs | 41.6233 μs | 105.4688 | - | 887.53 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 100 | 281.416 μs | 42.4060 μs | 2.3244 μs | 46.8750 | - | 387.68 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 100 | 681.941 μs | 1,046.9982 μs | 57.3895 μs | 195.3125 | - | 1607.1 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 100 | 263.036 μs | 50.4875 μs | 2.7674 μs | 41.9922 | - | 347.81 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 100 | 345.074 μs | 42.0750 μs | 2.3063 μs | 95.7031 | - | 782.03 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 100 | 283.566 μs | 62.5282 μs | 3.4274 μs | 45.8984 | - | 376.73 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 100 | 388.605 μs | 257.4201 μs | 14.1101 μs | 101.5625 | - | 835.19 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 100 | 131.870 μs | 22.9381 μs | 1.2573 μs | 27.3438 | - | 223.44 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 100 | 373.981 μs | 156.7272 μs | 8.5907 μs | 103.5156 | - | 850.78 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 100 | 141.150 μs | 32.5332 μs | 1.7833 μs | 27.8320 | - | 228.91 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 100 | 419.236 μs | 94.2505 μs | 5.1662 μs | 109.3750 | - | 908.63 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 100 | 116.853 μs | 26.4113 μs | 1.4477 μs | 21.9727 | - | 179.69 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 100 | 680.058 μs | 246.8836 μs | 13.5325 μs | 203.1250 | - | 1668.04 KB |
| When_class_has_description_then_it_is_converted | 100 | 130.173 μs | 22.5006 μs | 1.2333 μs | 29.2969 | - | 240.63 KB |
| When_class_has_description_then_it_is_converted_old | 100 | 387.316 μs | 104.0113 μs | 5.7012 μs | 107.4219 | - | 878.16 KB |
| When_method_has_exceptions_then_it_is_converted | 100 | 186.138 μs | 96.6943 μs | 5.3001 μs | 55.4199 | - | 453.13 KB |
| When_method_has_exceptions_then_it_is_converted_old | 100 | 628.562 μs | 761.4795 μs | 41.7393 μs | 167.9688 | - | 1385.94 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 100 | 193.670 μs | 64.2958 μs | 3.5243 μs | 55.4199 | - | 453.13 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 100 | 622.108 μs | 410.4711 μs | 22.4993 μs | 167.9688 | - | 1398.44 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 100 | 166.806 μs | 6.3192 μs | 0.3464 μs | 46.3867 | - | 380.47 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 100 | 604.800 μs | 317.7374 μs | 17.4163 μs | 156.2500 | - | 1300 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 100 | 164.023 μs | 55.9129 μs | 3.0648 μs | 46.6309 | - | 381.25 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 100 | 631.547 μs | 279.5007 μs | 15.3204 μs | 160.1563 | - | 1339.85 KB |
| When_method_has_returns_then_it_is_converted | 100 | 167.735 μs | 28.4340 μs | 1.5586 μs | 46.3867 | - | 380.47 KB |
| When_method_has_returns_then_it_is_converted_old | 100 | 621.783 μs | 154.3695 μs | 8.4615 μs | 167.9688 | - | 1372.66 KB |
| When_method_has_no_returns_then_it_is_ignored | 100 | 149.123 μs | 25.9140 μs | 1.4204 μs | 43.2129 | - | 353.13 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 100 | 630.471 μs | 411.3912 μs | 22.5497 μs | 152.3438 | - | 1270.32 KB |
| When_method_has_dictionary_args_then_it_is_found | 100 | 210.552 μs | 69.6438 μs | 3.8174 μs | 57.1289 | 0.2441 | 468.01 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 100 | 720.572 μs | 255.7779 μs | 14.0200 μs | 144.5313 | - | 1196.99 KB |
| When_xml_doc_is_missing_then_description_is_empty | 1000 | 1,230.245 μs | 120.7848 μs | 6.6206 μs | 140.6250 | - | 1164.06 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 1000 | 26,982.004 μs | 177.5809 μs | 9.7338 μs | 562.5000 | - | 4726.56 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 1000 | 1,712.746 μs | 95.1139 μs | 5.2135 μs | 587.8906 | 1.9531 | 4804.7 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 1000 | 6,454.806 μs | 1,588.9125 μs | 87.0937 μs | 1718.7500 | - | 14203.16 KB |
| When_description_has_see_tag_then_it_is_converted | 1000 | 1,855.218 μs | 409.2382 μs | 22.4317 μs | 359.3750 | - | 2960.96 KB |
| When_description_has_see_tag_then_it_is_converted_old | 1000 | 6,837.618 μs | 2,787.4013 μs | 152.7869 μs | 1531.2500 | 7.8125 | 12546.88 KB |
| When_description_has_paramref_tag_then_it_is_converted | 1000 | 1,487.215 μs | 411.4510 μs | 22.5530 μs | 291.0156 | - | 2390.69 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 1000 | 6,271.535 μs | 1,344.8508 μs | 73.7158 μs | 1445.3125 | 7.8125 | 11844.2 KB |
| When_description_has_generic_tags_then_it_is_converted | 1000 | 1,286.579 μs | 280.6707 μs | 15.3845 μs | 201.1719 | - | 1648.44 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 1000 | 5,517.958 μs | 930.6545 μs | 51.0123 μs | 1250.0000 | - | 10320.35 KB |
| When_type_has_description_then_it_it_resolved | 1000 | 1,330.467 μs | 198.4613 μs | 10.8783 μs | 269.5313 | - | 2218.82 KB |
| When_type_has_description_then_it_it_resolved_old | 1000 | 3,086.402 μs | 6,855.9397 μs | 375.7972 μs | 859.3750 | - | 7070.54 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 1000 | 1,313.667 μs | 321.2964 μs | 17.6113 μs | 269.5313 | - | 2218.82 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 1000 | 2,774.217 μs | 1,155.1927 μs | 63.3200 μs | 859.3750 | - | 7070.54 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 1000 | 3,965.279 μs | 467.7478 μs | 25.6388 μs | 687.5000 | - | 5703.35 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 1000 | 6,016.234 μs | 138.4521 μs | 7.5890 μs | 1875.0000 | - | 15539.67 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 1000 | 3,923.987 μs | 846.8971 μs | 46.4213 μs | 671.8750 | - | 5586.16 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 1000 | 3,644.627 μs | 360.8881 μs | 19.7815 μs | 984.3750 | - | 8078.49 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 1000 | 3,607.374 μs | 2,637.7817 μs | 144.5857 μs | 609.3750 | - | 5094.03 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 1000 | 3,296.771 μs | 730.9340 μs | 40.0650 μs | 906.2500 | - | 7453.14 KB |
| When_type_is_an_interface_then_description_is_resolved | 1000 | 1,293.756 μs | 207.7458 μs | 11.3872 μs | 265.6250 | - | 2171.95 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 1000 | 4,245.344 μs | 1,291.6378 μs | 70.7990 μs | 1078.1250 | - | 8875.3 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 1000 | 2,806.106 μs | 341.9817 μs | 18.7452 μs | 468.7500 | - | 3876.78 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 1000 | 6,449.772 μs | 7,235.4612 μs | 396.6000 μs | 1937.5000 | - | 16071 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 1000 | 2,618.324 μs | 512.4757 μs | 28.0905 μs | 421.8750 | - | 3478.09 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 1000 | 3,474.189 μs | 335.1293 μs | 18.3696 μs | 953.1250 | - | 7820.33 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 1000 | 2,866.942 μs | 218.1000 μs | 11.9548 μs | 460.9375 | - | 3767.33 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 1000 | 3,811.827 μs | 640.6439 μs | 35.1159 μs | 1015.6250 | - | 8351.89 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 1000 | 1,338.381 μs | 152.8203 μs | 8.3766 μs | 273.4375 | - | 2234.38 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 1000 | 3,737.560 μs | 871.0731 μs | 47.7465 μs | 1031.2500 | - | 8507.83 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 1000 | 1,416.179 μs | 319.2189 μs | 17.4975 μs | 279.2969 | - | 2289.12 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 1000 | 4,120.248 μs | 630.5575 μs | 34.5630 μs | 1109.3750 | - | 9086.31 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 1000 | 1,187.904 μs | 183.5816 μs | 10.0627 μs | 218.7500 | - | 1796.92 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 1000 | 8,854.104 μs | 36,370.8638 μs | 1,993.6098 μs | 2000.0000 | - | 16680.38 KB |
| When_class_has_description_then_it_is_converted | 1000 | 1,309.523 μs | 240.0889 μs | 13.1601 μs | 292.9688 | - | 2406.33 KB |
| When_class_has_description_then_it_is_converted_old | 1000 | 3,953.522 μs | 309.1084 μs | 16.9433 μs | 1062.5000 | - | 8781.54 KB |
| When_method_has_exceptions_then_it_is_converted | 1000 | 1,847.697 μs | 878.4101 μs | 48.1486 μs | 554.6875 | 1.9531 | 4531.25 KB |
| When_method_has_exceptions_then_it_is_converted_old | 1000 | 5,994.324 μs | 1,349.3639 μs | 73.9632 μs | 1687.5000 | - | 13859.42 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 1000 | 1,863.369 μs | 400.0955 μs | 21.9306 μs | 554.6875 | - | 4531.26 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 1000 | 6,099.929 μs | 2,248.8510 μs | 123.2671 μs | 1687.5000 | - | 13984.4 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 1000 | 1,689.574 μs | 29.4428 μs | 1.6139 μs | 464.8438 | - | 3804.69 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 1000 | 5,811.700 μs | 876.1330 μs | 48.0238 μs | 1562.5000 | - | 13000.03 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 1000 | 1,649.459 μs | 531.1517 μs | 29.1142 μs | 464.8438 | - | 3812.5 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 1000 | 6,092.142 μs | 1,799.8436 μs | 98.6555 μs | 1625.0000 | - | 13398.49 KB |
| When_method_has_returns_then_it_is_converted | 1000 | 1,672.880 μs | 134.2608 μs | 7.3593 μs | 464.8438 | - | 3804.69 KB |
| When_method_has_returns_then_it_is_converted_old | 1000 | 6,482.146 μs | 378.6700 μs | 20.7562 μs | 1656.2500 | - | 13726.59 KB |
| When_method_has_no_returns_then_it_is_ignored | 1000 | 1,465.657 μs | 517.6719 μs | 28.3753 μs | 431.6406 | - | 3531.26 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 1000 | 6,050.927 μs | 435.7244 μs | 23.8835 μs | 1531.2500 | - | 12703.15 KB |
| When_method_has_dictionary_args_then_it_is_found | 1000 | 2,104.197 μs | 597.3124 μs | 32.7407 μs | 570.3125 | - | 4680.08 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 1000 | 6,932.548 μs | 1,085.3456 μs | 59.4915 μs | 1437.5000 | - | 11969.93 KB |
| When_xml_doc_is_missing_then_description_is_empty | 10000 | 12,199.106 μs | 888.3268 μs | 48.6922 μs | 1421.8750 | - | 11640.63 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 10000 | 276,285.483 μs | 1,256.5391 μs | 68.8751 μs | 5500.0000 | - | 47265.63 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 10000 | 16,353.050 μs | 2,100.3507 μs | 115.1273 μs | 5875.0000 | - | 48046.91 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 10000 | 62,934.400 μs | 53,182.9198 μs | 2,915.1353 μs | 17000.0000 | - | 142031.79 KB |
| When_description_has_see_tag_then_it_is_converted | 10000 | 18,102.834 μs | 1,683.2774 μs | 92.2661 μs | 3625.0000 | - | 29609.41 KB |
| When_description_has_see_tag_then_it_is_converted_old | 10000 | 70,130.517 μs | 82,315.6182 μs | 4,511.9968 μs | 15000.0000 | - | 125469.28 KB |
| When_description_has_paramref_tag_then_it_is_converted | 10000 | 15,025.644 μs | 2,801.1365 μs | 153.5397 μs | 2921.8750 | - | 23906.88 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 10000 | 65,896.100 μs | 140,222.9331 μs | 7,686.0922 μs | 14500.0000 | - | 118442.54 KB |
| When_description_has_generic_tags_then_it_is_converted | 10000 | 12,228.729 μs | 1,697.6519 μs | 93.0540 μs | 2015.6250 | - | 16484.39 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 10000 | 55,471.900 μs | 14,977.2543 μs | 820.9538 μs | 12333.3333 | - | 103203.48 KB |
| When_type_has_description_then_it_it_resolved | 10000 | 13,116.584 μs | 3,387.4214 μs | 185.6760 μs | 2703.1250 | - | 22188.22 KB |
| When_type_has_description_then_it_it_resolved_old | 10000 | 27,623.539 μs | 11,932.1228 μs | 654.0399 μs | 8500.0000 | - | 70705.43 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 10000 | 13,063.355 μs | 2,171.5513 μs | 119.0301 μs | 2703.1250 | - | 22188.22 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 10000 | 28,508.472 μs | 14,125.7575 μs | 774.2804 μs | 8500.0000 | - | 70705.43 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 10000 | 38,488.681 μs | 7,727.7376 μs | 423.5834 μs | 6928.5714 | - | 57033.05 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 10000 | 60,715.433 μs | 19,650.0114 μs | 1,077.0834 μs | 19000.0000 | - | 155396.83 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 10000 | 39,124.249 μs | 9,196.5893 μs | 504.0961 μs | 6769.2308 | - | 55861.17 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 10000 | 37,691.542 μs | 23,858.1619 μs | 1,307.7464 μs | 9750.0000 | - | 80785.45 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 10000 | 35,462.187 μs | 8,826.8896 μs | 483.8316 μs | 6200.0000 | - | 50938.71 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 10000 | 34,423.075 μs | 22,909.1722 μs | 1,255.7290 μs | 9000.0000 | - | 74531.52 KB |
| When_type_is_an_interface_then_description_is_resolved | 10000 | 12,845.913 μs | 2,967.6170 μs | 162.6651 μs | 2656.2500 | - | 21719.48 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 10000 | 45,463.300 μs | 42,942.3833 μs | 2,353.8169 μs | 10666.6667 | - | 88753.01 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 10000 | 27,867.711 μs | 6,112.5683 μs | 335.0505 μs | 4718.7500 | - | 38767.22 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 10000 | 72,809.850 μs | 167,727.0599 μs | 9,193.6862 μs | 19500.0000 | - | 160709.7 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 10000 | 25,785.980 μs | 7,579.8740 μs | 415.4785 μs | 4250.0000 | - | 34780.31 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 10000 | 36,242.392 μs | 22,145.9465 μs | 1,213.8941 μs | 9500.0000 | - | 78203.35 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 10000 | 28,424.864 μs | 4,623.3316 μs | 253.4204 μs | 4593.7500 | - | 37672.82 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 10000 | 40,025.442 μs | 12,718.7813 μs | 697.1593 μs | 10000.0000 | - | 83518.98 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 10000 | 13,379.338 μs | 1,920.1032 μs | 105.2473 μs | 2734.3750 | - | 22343.81 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 10000 | 37,535.650 μs | 11,931.6520 μs | 654.0141 μs | 10250.0000 | - | 85078.35 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 10000 | 14,091.496 μs | 4,328.2706 μs | 237.2471 μs | 2796.8750 | - | 22891.21 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 10000 | 44,212.878 μs | 53,686.3867 μs | 2,942.7320 μs | 11000.0000 | - | 90863.15 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 10000 | 11,703.109 μs | 3,193.2865 μs | 175.0348 μs | 2187.5000 | - | 17969.21 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 10000 | 75,550.600 μs | 155,217.3312 μs | 8,507.9857 μs | 20000.0000 | - | 166803.61 KB |
| When_class_has_description_then_it_is_converted | 10000 | 13,414.508 μs | 11,936.9535 μs | 654.3047 μs | 2937.5000 | - | 24063.31 KB |
| When_class_has_description_then_it_is_converted_old | 10000 | 42,178.333 μs | 39,464.2463 μs | 2,163.1685 μs | 10666.6667 | - | 87815.51 KB |
| When_method_has_exceptions_then_it_is_converted | 10000 | 18,818.285 μs | 5,864.5134 μs | 321.4538 μs | 5531.2500 | - | 45312.55 KB |
| When_method_has_exceptions_then_it_is_converted_old | 10000 | 65,049.167 μs | 33,998.7769 μs | 1,863.5877 μs | 16500.0000 | - | 138594.15 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 10000 | 19,293.769 μs | 7,136.5547 μs | 391.1786 μs | 5531.2500 | - | 45312.55 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 10000 | 65,845.583 μs | 118,921.8235 μs | 6,518.5065 μs | 17000.0000 | - | 139844.15 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 10000 | 16,917.518 μs | 2,923.7895 μs | 160.2628 μs | 4656.2500 | - | 38046.92 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 10000 | 59,277.744 μs | 17,933.9035 μs | 983.0178 μs | 15666.6667 | - | 130000.27 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 10000 | 16,368.858 μs | 5,941.6513 μs | 325.6820 μs | 4656.2500 | - | 38125.03 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 10000 | 61,006.622 μs | 22,904.4494 μs | 1,255.4702 μs | 16333.3333 | - | 133984.64 KB |
| When_method_has_returns_then_it_is_converted | 10000 | 16,508.366 μs | 2,656.3346 μs | 145.6027 μs | 4656.2500 | - | 38046.92 KB |
| When_method_has_returns_then_it_is_converted_old | 10000 | 67,627.500 μs | 50,038.1423 μs | 2,742.7594 μs | 16500.0000 | - | 137266.02 KB |
| When_method_has_no_returns_then_it_is_ignored | 10000 | 15,100.626 μs | 5,553.5070 μs | 304.4065 μs | 4312.5000 | - | 35312.55 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 10000 | 67,048.400 μs | 86,987.1156 μs | 4,768.0574 μs | 15500.0000 | - | 127031.65 KB |
| When_method_has_dictionary_args_then_it_is_found | 10000 | 21,247.066 μs | 7,455.4477 μs | 408.6582 μs | 5718.7500 | - | 46800.81 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 10000 | 70,074.367 μs | 9,165.5684 μs | 502.3957 μs | 14333.3333 | - | 119699.27 KB |
| When_xml_doc_is_missing_then_description_is_empty | 100000 | 120,859.507 μs | 12,137.4212 μs | 665.2930 μs | 14200.0000 | - | 116406.25 KB |
| When_xml_doc_is_missing_then_description_is_empty_old | 100000 | 2,725,580.867 μs | 281,667.2610 μs | 15,439.1331 μs | 57000.0000 | - | 472656.25 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away | 100000 | 172,524.667 μs | 18,470.1591 μs | 1,012.4117 μs | 58500.0000 | - | 480469.29 KB |
| When_xml_doc_with_multiple_breaks_is_read_then_they_are_not_stripped_away_old | 100000 | 601,319.133 μs | 290,051.4265 μs | 15,898.6975 μs | 173000.0000 | 1000.0000 | 1420313.57 KB |
| When_description_has_see_tag_then_it_is_converted | 100000 | 187,286.600 μs | 94,192.6960 μs | 5,163.0195 μs | 36000.0000 | - | 296096.94 KB |
| When_description_has_see_tag_then_it_is_converted_old | 100000 | 681,088.633 μs | 317,488.1082 μs | 17,402.5946 μs | 153000.0000 | 1000.0000 | 1254688.56 KB |
| When_description_has_paramref_tag_then_it_is_converted | 100000 | 144,636.917 μs | 34,561.3856 μs | 1,894.4262 μs | 29000.0000 | - | 239069.42 KB |
| When_description_has_paramref_tag_then_it_is_converted_old | 100000 | 617,923.267 μs | 48,661.9208 μs | 2,667.3241 μs | 145000.0000 | 1000.0000 | 1184420.41 KB |
| When_description_has_generic_tags_then_it_is_converted | 100000 | 121,884.083 μs | 19,649.2068 μs | 1,077.0393 μs | 20000.0000 | - | 164844.29 KB |
| When_description_has_generic_tags_then_it_is_converted_old | 100000 | 567,797.267 μs | 219,565.4140 μs | 12,035.1213 μs | 126000.0000 | 1000.0000 | 1032032.33 KB |
| When_type_has_description_then_it_it_resolved | 100000 | 129,652.500 μs | 56,766.0772 μs | 3,111.5403 μs | 27000.0000 | - | 221882.3 KB |
| When_type_has_description_then_it_it_resolved_old | 100000 | 279,065.700 μs | 137,640.5074 μs | 7,544.5407 μs | 86000.0000 | - | 707054.36 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded | 100000 | 128,535.333 μs | 18,932.1295 μs | 1,037.7339 μs | 27000.0000 | - | 221882.3 KB |
| When_we_use_custom_documentation_files_they_are_correctly_loaded_old | 100000 | 278,688.933 μs | 190,098.9362 μs | 10,419.9642 μs | 86000.0000 | - | 707054.36 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved | 100000 | 388,008.333 μs | 121,439.9351 μs | 6,656.5327 μs | 69000.0000 | - | 570331.98 KB |
| When_parameter_has_inheritdoc_then_it_is_resolved_old | 100000 | 617,516.067 μs | 189,819.8929 μs | 10,404.6689 μs | 190000.0000 | 2000.0000 | 1553967.3 KB |
| When_method_has_inheritdoc_then_it_is_resolved | 100000 | 388,327.700 μs | 135,499.2838 μs | 7,427.1730 μs | 68000.0000 | - | 558612.99 KB |
| When_method_has_inheritdoc_then_it_is_resolved_old | 100000 | 383,935.267 μs | 188,689.0892 μs | 10,342.6857 μs | 98000.0000 | - | 807847.27 KB |
| When_property_has_inheritdoc_then_it_is_resolved | 100000 | 356,269.400 μs | 102,935.1776 μs | 5,642.2244 μs | 62000.0000 | - | 509393.12 KB |
| When_property_has_inheritdoc_then_it_is_resolved_old | 100000 | 337,054.233 μs | 63,085.0747 μs | 3,457.9058 μs | 91000.0000 | - | 745313.59 KB |
| When_type_is_an_interface_then_description_is_resolved | 100000 | 128,561.883 μs | 16,491.3307 μs | 903.9455 μs | 26500.0000 | - | 217194.88 KB |
| When_type_is_an_interface_then_description_is_resolved_old | 100000 | 427,854.733 μs | 201,584.9437 μs | 11,049.5510 μs | 108000.0000 | - | 887529.8 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 282,278.533 μs | 117,860.3894 μs | 6,460.3257 μs | 47000.0000 | - | 387682.23 KB |
| When_parameter_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 638,184.767 μs | 264,927.5888 μs | 14,521.5752 μs | 196000.0000 | 2000.0000 | 1607092.24 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved | 100000 | 258,612.633 μs | 14,135.8916 μs | 774.8359 μs | 42000.0000 | - | 347811.74 KB |
| When_property_has_inheritdoc_on_interface_then_it_is_resolved_old | 100000 | 351,675.700 μs | 132,374.2876 μs | 7,255.8814 μs | 95000.0000 | - | 782032.15 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved | 100000 | 282,699.200 μs | 29,497.1756 μs | 1,616.8397 μs | 46000.0000 | - | 376734.66 KB |
| When_method_has_inheritdoc_then_on_interface_it_is_resolved_old | 100000 | 385,172.367 μs | 155,013.5693 μs | 8,496.8168 μs | 102000.0000 | 1000.0000 | 835188.57 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used | 100000 | 132,875.200 μs | 3,960.2381 μs | 217.0740 μs | 27000.0000 | - | 223439.33 KB |
| When_class_implements_interface_and_property_has_description_then_property_description_is_used_old | 100000 | 376,766.867 μs | 148,048.4219 μs | 8,115.0336 μs | 104000.0000 | - | 850782.16 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used | 100000 | 142,962.417 μs | 8,209.5160 μs | 449.9913 μs | 28000.0000 | - | 228912.52 KB |
| When_class_implements_interface_and_method_has_description_then_method_description_is_used_old | 100000 | 424,184.900 μs | 69,537.9853 μs | 3,811.6116 μs | 111000.0000 | - | 908628.83 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used | 100000 | 115,625.983 μs | 2,306.2521 μs | 126.4135 μs | 22000.0000 | - | 179692.56 KB |
| When_class_implements_interface_and_method_has_description_then_method_parameter_description_is_used_old | 100000 | 687,318.967 μs | 254,192.5425 μs | 13,933.1510 μs | 204000.0000 | 2000.0000 | 1668032.2 KB |
| When_class_has_description_then_it_is_converted | 100000 | 131,622.650 μs | 72,629.1065 μs | 3,981.0464 μs | 29000.0000 | - | 240633.07 KB |
| When_class_has_description_then_it_is_converted_old | 100000 | 395,235.800 μs | 167,555.4996 μs | 9,184.2824 μs | 107000.0000 | - | 878154.53 KB |
| When_method_has_exceptions_then_it_is_converted | 100000 | 190,465.100 μs | 37,521.0015 μs | 2,056.6527 μs | 55000.0000 | - | 453126.59 KB |
| When_method_has_exceptions_then_it_is_converted_old | 100000 | 603,740.767 μs | 255,448.2207 μs | 14,001.9790 μs | 169000.0000 | 1000.0000 | 1385939.09 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored | 100000 | 186,864.533 μs | 43,580.8893 μs | 2,388.8156 μs | 55000.0000 | - | 453126.59 KB |
| When_method_has_exceptions_then_exceptions_with_no_code_will_be_ignored_old | 100000 | 622,202.433 μs | 138,360.9529 μs | 7,584.0307 μs | 171000.0000 | 1000.0000 | 1398466.98 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written | 100000 | 170,212.083 μs | 45,516.4586 μs | 2,494.9107 μs | 46500.0000 | - | 380469.55 KB |
| When_method_has_only_exceptions_with_no_code_then_error_section_will_not_be_written_old | 100000 | 589,140.633 μs | 154,792.2254 μs | 8,484.6842 μs | 159000.0000 | 1000.0000 | 1300001.59 KB |
| When_method_has_no_exceptions_then_it_is_ignored | 100000 | 169,057.350 μs | 85,439.5459 μs | 4,683.2298 μs | 46500.0000 | - | 381250.4 KB |
| When_method_has_no_exceptions_then_it_is_ignored_old | 100000 | 605,887.400 μs | 56,193.7587 μs | 3,080.1695 μs | 164000.0000 | 1000.0000 | 1339845.36 KB |
| When_method_has_returns_then_it_is_converted | 100000 | 169,595.600 μs | 47,079.1826 μs | 2,580.5689 μs | 46500.0000 | - | 380469.54 KB |
| When_method_has_returns_then_it_is_converted_old | 100000 | 632,316.367 μs | 102,954.8414 μs | 5,643.3023 μs | 168000.0000 | 1000.0000 | 1372657.04 KB |
| When_method_has_no_returns_then_it_is_ignored | 100000 | 154,807.650 μs | 37,693.7802 μs | 2,066.1233 μs | 43000.0000 | - | 353126.59 KB |
| When_method_has_no_returns_then_it_is_ignored_old | 100000 | 601,431.833 μs | 166,151.8528 μs | 9,107.3437 μs | 155000.0000 | 1000.0000 | 1270313.3 KB |
| When_method_has_dictionary_args_then_it_is_found | 100000 | 214,225.067 μs | 48,084.7327 μs | 2,635.6865 μs | 57000.0000 | - | 468009.09 KB |
| When_method_has_dictionary_args_then_it_is_found_old | 100000 | 698,113.633 μs | 123,243.0853 μs | 6,755.3694 μs | 146000.0000 | 1000.0000 | 1196990.77 KB |