From c5aca416918032404429c613d7e2e7aeb68e76bb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 17 Jul 2019 10:21:26 +0200 Subject: [PATCH] Use custom SequenceEqual. LINQ version is slower and this is potentially a hot path. --- src/Avalonia.Visuals/Media/DashStyle.cs | 35 +++++++++++++++++-------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/Avalonia.Visuals/Media/DashStyle.cs b/src/Avalonia.Visuals/Media/DashStyle.cs index bd81cb1d03..4ae2285dfd 100644 --- a/src/Avalonia.Visuals/Media/DashStyle.cs +++ b/src/Avalonia.Visuals/Media/DashStyle.cs @@ -136,17 +136,7 @@ namespace Avalonia.Media return false; } - if (ReferenceEquals(a.Dashes, b.Dashes)) - { - return true; - } - - if ((a.Dashes is null && !(b.Dashes is null)) || (b.Dashes is null && !(a.Dashes is null))) - { - return false; - } - - return a.Dashes.SequenceEqual(b.Dashes); + return SequenceEqual(a.Dashes, b.Dashes); } internal static int GetHashCode(IDashStyle style) @@ -164,5 +154,28 @@ namespace Avalonia.Media return hashCode; } + + private static bool SequenceEqual(IReadOnlyList left, IReadOnlyList right) + { + if (left == right) + { + return true; + } + + if (left == null || right == null || left.Count != right.Count) + { + return false; + } + + for (var c = 0; c < left.Count; c++) + { + if (left[c] != right[c]) + { + return false; + } + } + + return true; + } } }