From 3f8fa299f9cf7f8750734a023f307d2e376ff9c6 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Tue, 25 May 2021 04:12:24 +0700 Subject: [PATCH] Improve MurmurHash string hash memory footprint (#5028) * Reduce memory footprint * Fix enumerator, off by 1 error --- src/Akka.sln | 2 +- src/contrib/cluster/Akka.DistributedData/ORSet.cs | 6 +++--- src/core/Akka/Actor/Address.cs | 2 +- src/core/Akka/Util/MurmurHash.cs | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Akka.sln b/src/Akka.sln index 2c21386bd39..52dbe1dacd7 100644 --- a/src/Akka.sln +++ b/src/Akka.sln @@ -244,7 +244,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Akka.AspNetCore", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SerializationBenchmarks", "benchmark\SerializationBenchmarks\SerializationBenchmarks.csproj", "{2E4B9584-42CC-4D17-B719-9F462B16C94D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DDataStressTest", "examples\Cluster\DData\DDataStressTest\DDataStressTest.csproj", "{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DDataStressTest", "examples\Cluster\DData\DDataStressTest\DDataStressTest.csproj", "{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/contrib/cluster/Akka.DistributedData/ORSet.cs b/src/contrib/cluster/Akka.DistributedData/ORSet.cs index 95e50398df1..7ebbd63bc7f 100644 --- a/src/contrib/cluster/Akka.DistributedData/ORSet.cs +++ b/src/contrib/cluster/Akka.DistributedData/ORSet.cs @@ -712,9 +712,9 @@ private ORSet MergeRemoveDelta(RemoveDeltaOperation delta) { while (deleteDots.MoveNext()) { - var curr = deleteDots.Current; - deleteDotNodes.Add(curr.Key); - deleteDotsAreGreater &= (thisDot != null && (thisDot.VersionAt(curr.Key) <= curr.Value)); + var current = deleteDots.Current; + deleteDotNodes.Add(current.Key); + deleteDotsAreGreater &= (thisDot != null && (thisDot.VersionAt(current.Key) <= current.Value)); } } diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index 9e13a9374d2..9e638d01428 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -40,7 +40,7 @@ public int Compare(Address x, Address y) if (result != 0) return result; result = string.CompareOrdinal(x.System, y.System); if (result != 0) return result; - result = string.CompareOrdinal(x.Host ?? "", y.Host ?? ""); + result = string.CompareOrdinal(x.Host ?? string.Empty, y.Host ?? string.Empty); if (result != 0) return result; result = (x.Port ?? 0).CompareTo(y.Port ?? 0); return result; diff --git a/src/core/Akka/Util/MurmurHash.cs b/src/core/Akka/Util/MurmurHash.cs index 511e8f5c4cd..f9aa8df2af2 100644 --- a/src/core/Akka/Util/MurmurHash.cs +++ b/src/core/Akka/Util/MurmurHash.cs @@ -202,20 +202,20 @@ public static int StringHash(string s) { unchecked { - var sChar = s.ToCharArray(); + var span = s.AsSpan(); var h = StartHash((uint)s.Length * StringSeed); var c = HiddenMagicA; var k = HiddenMagicB; var j = 0; while (j + 1 < s.Length) { - var i = (uint)((sChar[j] << 16) + sChar[j + 1]); + var i = (uint)((span[j] << 16) + span[j + 1]); h = ExtendHash(h, i, c, k); c = NextMagicA(c); k = NextMagicB(k); j += 2; } - if (j < s.Length) h = ExtendHash(h, sChar[j], c, k); + if (j < s.Length) h = ExtendHash(h, span[j], c, k); return (int)FinalizeHash(h); } }