From 41e3acf0fa89eab621dbc0a285b1d3a6fb6729ce Mon Sep 17 00:00:00 2001 From: mnltejaswini Date: Fri, 26 Feb 2016 11:19:57 -0800 Subject: [PATCH] [Perf] Avoid Linq method and save its related allocations in TreeRouter --- .../Template/RouteTemplate.cs | 19 +++++++++++++++++++ .../Tree/TreeRouter.cs | 3 +-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs b/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs index 3903d8bab0..d482f3a1b4 100644 --- a/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs +++ b/src/Microsoft.AspNetCore.Routing/Template/RouteTemplate.cs @@ -59,5 +59,24 @@ namespace Microsoft.AspNetCore.Routing.Template { return string.Join(SeparatorString, Segments.Select(s => s.DebuggerToString())); } + + /// + /// Gets the parameter matching the given name. + /// + /// The name of the parameter to match. + /// The matching parameter or null if no parameter matches the given name. + public TemplatePart GetParameter(string name) + { + for (var i = 0; i < Parameters.Count; i++) + { + var parameter = Parameters[i]; + if (string.Equals(parameter.Name, name, StringComparison.OrdinalIgnoreCase)) + { + return parameter; + } + } + + return null; + } } } diff --git a/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs b/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs index 451171c248..46544b2ee0 100644 --- a/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs +++ b/src/Microsoft.AspNetCore.Routing/Tree/TreeRouter.cs @@ -386,8 +386,7 @@ namespace Microsoft.AspNetCore.Routing.Tree { if (entry.RequiredLinkValues.ContainsKey(kvp.Key)) { - var parameter = entry.Template.Parameters - .FirstOrDefault(p => string.Equals(p.Name, kvp.Key, StringComparison.OrdinalIgnoreCase)); + var parameter = entry.Template.GetParameter(kvp.Key); if (parameter == null) {