diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs index d0ed970175f..7996de4650c 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy; internal static class TagHelperParseTreeRewriter { - public static RazorSyntaxTree Rewrite(RazorSyntaxTree syntaxTree, string tagHelperPrefix, IEnumerable descriptors, out ISet usedDescriptors) + public static RazorSyntaxTree Rewrite(RazorSyntaxTree syntaxTree, string tagHelperPrefix, IReadOnlyList descriptors, out ISet usedDescriptors) { var errorSink = new ErrorSink(); @@ -68,7 +68,7 @@ internal sealed class Rewriter : SyntaxRewriter public Rewriter( RazorSourceDocument source, string tagHelperPrefix, - IEnumerable descriptors, + IReadOnlyList descriptors, RazorParserFeatureFlags featureFlags, ErrorSink errorSink) { diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/TagHelperBinder.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/TagHelperBinder.cs index 1e2a198363f..cf67d299575 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/TagHelperBinder.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/src/TagHelperBinder.cs @@ -22,10 +22,11 @@ internal sealed class TagHelperBinder /// /// The tag helper prefix being used by the document. /// The descriptors that the will pull from. - public TagHelperBinder(string tagHelperPrefix, IEnumerable descriptors) + public TagHelperBinder(string tagHelperPrefix, IReadOnlyList descriptors) { _tagHelperPrefix = tagHelperPrefix; - _registrations = new Dictionary>(StringComparer.OrdinalIgnoreCase); + // To reduce the frequency of dictionary resizes we use the incoming number of descriptors as a heuristic + _registrations = new Dictionary>(descriptors.Count, StringComparer.OrdinalIgnoreCase); // Populate our registrations foreach (var descriptor in descriptors) diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs index 9c666bf60d4..339d81a4c90 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperParseTreeRewriterTest.cs @@ -56,7 +56,7 @@ public void GetAttributeNameValuePairs_ParsesPairsCorrectly( var parseTreeRewriter = new TagHelperParseTreeRewriter.Rewriter( parseResult.Source, null, - Enumerable.Empty(), + Array.Empty(), parseResult.Options.FeatureFlags, errorSink); diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs index dc4397aa417..2dfc931436e 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/TagHelperRewritingTestBase.cs @@ -17,7 +17,7 @@ internal void RunParseTreeRewriterTest(string documentContent, params string[] t EvaluateData(descriptors, documentContent); } - internal IEnumerable BuildDescriptors(params string[] tagNames) + internal IReadOnlyList BuildDescriptors(params string[] tagNames) { var descriptors = new List(); @@ -29,11 +29,11 @@ internal IEnumerable BuildDescriptors(params string[] tagNa descriptors.Add(descriptor); } - return descriptors; + return descriptors.AsReadOnly(); } internal void EvaluateData( - IEnumerable descriptors, + IReadOnlyList descriptors, string documentContent, string tagHelperPrefix = null, RazorParserFeatureFlags featureFlags = null) diff --git a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs index 0eb542cdc47..a80e2755b9e 100644 --- a/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs +++ b/src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TagHelperBinderTest.cs @@ -167,8 +167,8 @@ public static TheoryData RequiredParentData return new TheoryData< string, // tagName string, // parentTagName - IEnumerable, // availableDescriptors - IEnumerable> // expectedDescriptors + IReadOnlyList, // availableDescriptors + IReadOnlyList> // expectedDescriptors { { "strong", @@ -207,7 +207,7 @@ public void GetBinding_ReturnsBindingResultWithDescriptorsParentTags( object expectedDescriptors) { // Arrange - var tagHelperBinder = new TagHelperBinder(null, (IEnumerable)availableDescriptors); + var tagHelperBinder = new TagHelperBinder(null, (IReadOnlyList)availableDescriptors); // Act var bindingResult = tagHelperBinder.GetBinding(