Skip to content

Conversation

N-Olbert
Copy link
Contributor

@N-Olbert N-Olbert commented Oct 10, 2025

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 :

baseDoc.Nodes().OfType<object>().ToArray();
child.ReplaceWith(nodes);

and here:

child.ReplaceWith(
baseDoc.Nodes().OfType<object>().ToArray());

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

@N-Olbert
Copy link
Contributor Author

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

@N-Olbert N-Olbert changed the title 8775 Improve performance of XML doc inference Oct 10, 2025
.GetParameters()
.Single(p => p.Name == "baz"));

parameterXml = documentationProvider.GetDescription(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

@@ -0,0 +1,1260 @@
using System.Collections.Concurrent;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" />
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant