diff --git a/benchmarks/Faster.Map.Benchmark/StringBenchmark.cs b/benchmarks/Faster.Map.Benchmark/StringBenchmark.cs index 684532b..b9cec83 100644 --- a/benchmarks/Faster.Map.Benchmark/StringBenchmark.cs +++ b/benchmarks/Faster.Map.Benchmark/StringBenchmark.cs @@ -26,7 +26,7 @@ public class StringBenchmark #region Properties - [Params(1000, 10000, 100000, 400000, 900000, 1000000)] + [Params(/*1000, 10000, 100000, 400000, 900000,*/ 1000000)] public uint Length { get; set; } #endregion @@ -51,7 +51,7 @@ public void Setup() uint length = BitOperations.RoundUpToPowerOf2(Length) * 2; int dicLength = HashHelpers.GetPrime((int)Length); - _denseMap = new DenseMap(length, 0875, new StringHasher()); + _denseMap = new DenseMap(length, 0.875, new XxHash3StringHasher()); _dictionary = new Dictionary(dicLength); _robinhoodMap = new RobinhoodMap(length); diff --git a/benchmarks/Faster.Map.Benchmark/StringWrapperBenchmark.cs b/benchmarks/Faster.Map.Benchmark/StringWrapperBenchmark.cs index 030e80b..44ae605 100644 --- a/benchmarks/Faster.Map.Benchmark/StringWrapperBenchmark.cs +++ b/benchmarks/Faster.Map.Benchmark/StringWrapperBenchmark.cs @@ -25,7 +25,7 @@ public class StringWrapperBenchmark #region Properties - [Params(1000, 10000, 100000, 400000, 900000, 1000000)] + [Params(/*1000, 10000, 100000, 400000, 900000,*/ 1000000)] public uint Length { get; set; } #endregion @@ -71,23 +71,23 @@ public void DenseMap() } } - [Benchmark] - public void RobinhoodMap() - { - foreach (var key in keys) - { - _robinhoodMap.Get(key, out var result); - } - } - - [Benchmark] - public void Dictionary() - { - foreach (var key in keys) - { - _dictionary.TryGetValue(key, out var result); - } - } + //[Benchmark] + //public void RobinhoodMap() + //{ + // foreach (var key in keys) + // { + // _robinhoodMap.Get(key, out var result); + // } + //} + + //[Benchmark] + //public void Dictionary() + //{ + // foreach (var key in keys) + // { + // _dictionary.TryGetValue(key, out var result); + // } + //} } } diff --git a/src/DenseMap.cs b/src/DenseMap.cs index 49fbe29..c19532d 100644 --- a/src/DenseMap.cs +++ b/src/DenseMap.cs @@ -4,7 +4,6 @@ #if NET7_0_OR_GREATER using Faster.Map.Contracts; -using Faster.Map.Core; using Faster.Map.Hasher; using System; using System.Collections.Generic; diff --git a/src/Hasher/XxHash3Hasher.cs b/src/Hasher/XxHash3Hasher.cs index 30059ff..8885222 100644 --- a/src/Hasher/XxHash3Hasher.cs +++ b/src/Hasher/XxHash3Hasher.cs @@ -11,8 +11,8 @@ public class XxHash3Hasher : IHasher where T : unmanaged public uint ComputeHash(T key) { var span = MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.AsRef(key), 1)); - var result = XxHash3.Hash(MemoryMarshal.AsBytes(span)); - return Unsafe.ReadUnaligned(ref result[0]); + var result = XxHash3.HashToUInt64(MemoryMarshal.AsBytes(span)) >> 32; + return Unsafe.As(ref result); } } } diff --git a/src/Hasher/StringHasher.cs b/src/Hasher/XxHash3StringHasher.cs similarity index 59% rename from src/Hasher/StringHasher.cs rename to src/Hasher/XxHash3StringHasher.cs index d2c44b4..34d941f 100644 --- a/src/Hasher/StringHasher.cs +++ b/src/Hasher/XxHash3StringHasher.cs @@ -6,14 +6,13 @@ namespace Faster.Map.Hasher { - public class StringHasher : IHasher + public class XxHash3StringHasher : IHasher { [MethodImpl(MethodImplOptions.AggressiveInlining)] public uint ComputeHash(string key) { - var span = key.AsSpan(); - var result = XxHash3.Hash(MemoryMarshal.AsBytes(span)); - return Unsafe.ReadUnaligned(ref result[0]); + var result = XxHash3.HashToUInt64(MemoryMarshal.AsBytes(key.AsSpan())) >> 32; + return Unsafe.As(ref result); } } } diff --git a/unittests/Faster.Map.DenseMap.Tests/StringHasherTests.cs b/unittests/Faster.Map.DenseMap.Tests/StringHasherTests.cs index 5f28f4d..8818455 100644 --- a/unittests/Faster.Map.DenseMap.Tests/StringHasherTests.cs +++ b/unittests/Faster.Map.DenseMap.Tests/StringHasherTests.cs @@ -13,7 +13,7 @@ public class StringHasherTests public StringHasherTests() { - _map = new DenseMap(16, 0.875, new StringHasher()); + _map = new DenseMap(16, 0.875, new XxHash3StringHasher()); } [Fact] @@ -170,7 +170,7 @@ public void Indexer_Set_UpdatesValueForExistingStringKey() [Fact] public void LoadFactorLimit_DoesNotExceedForStringKeys() { - var result = new DenseMap(4, 0.75, new StringHasher()); + var result = new DenseMap(4, 0.75, new XxHash3StringHasher()); result.Emplace("key1", "value1"); result.Emplace("key2", "value2");