diff --git a/src/DynamoCore/Library/LibraryServices.cs b/src/DynamoCore/Library/LibraryServices.cs index f48cf117c20..d4ab009f2e1 100644 --- a/src/DynamoCore/Library/LibraryServices.cs +++ b/src/DynamoCore/Library/LibraryServices.cs @@ -506,10 +506,12 @@ internal bool IsFunctionBuiltIn(string library, string name = "") } } - private static bool CanbeResolvedTo(ICollection partialName, ICollection fullName) + private static bool CanbeResolvedTo(string qualifiedName, string fullName) { - return null != partialName && null != fullName && partialName.Count <= fullName.Count - && fullName.Reverse().Take(partialName.Count).SequenceEqual(partialName.Reverse()); + return null != qualifiedName && null != fullName + && qualifiedName.Length <= fullName.Length + // compare the backing char spans of fullname[end - length..end] and qualifiedName without any allocations + && fullName.AsSpan(fullName.Length - qualifiedName.Length, qualifiedName.Length).SequenceEqual(qualifiedName.AsSpan()); } private static bool TryGetFunctionGroup( @@ -518,8 +520,7 @@ private static bool TryGetFunctionGroup( if (funcGroupMap.TryGetValue(qualifiedName, out funcGroup)) return true; - string[] partialName = qualifiedName.Split('.'); - string key = funcGroupMap.Keys.FirstOrDefault(k => CanbeResolvedTo(partialName, k.Split('.'))); + string key = funcGroupMap.Keys.FirstOrDefault(k => CanbeResolvedTo(qualifiedName, k)); if (key != null) {