From a8811be275eedc058cc6702d61023940b8e0fbdc Mon Sep 17 00:00:00 2001 From: Morilli <35152647+Morilli@users.noreply.github.com> Date: Fri, 4 Aug 2023 02:11:53 +0200 Subject: [PATCH] Optimize hashtable loading --- Obsidian/Services/HashtableService.cs | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Obsidian/Services/HashtableService.cs b/Obsidian/Services/HashtableService.cs index f412674..197f5d9 100644 --- a/Obsidian/Services/HashtableService.cs +++ b/Obsidian/Services/HashtableService.cs @@ -178,34 +178,25 @@ string checksum public void LoadHashtable(string hashtablePath) { using StreamReader reader = new(hashtablePath); - StringBuilder nameBuilder = new(); - while (reader.EndOfStream is false) { - string line = reader.ReadLine(); - string[] split = line.Split(' '); - - ulong pathHash = ulong.Parse(split[0], NumberStyles.HexNumber); - nameBuilder = nameBuilder.AppendJoin(' ', split.Skip(1)); - - this.Hashes.TryAdd(pathHash, nameBuilder.ToString()); - - nameBuilder.Clear(); + while (reader.ReadLine() is string line) { + var separatorIndex = line.IndexOf(' '); + + ulong pathHash = ulong.Parse(line.AsSpan(0, separatorIndex), NumberStyles.HexNumber); + + this.Hashes.TryAdd(pathHash, line[(separatorIndex+1)..]); } } private static void LoadBinHashtable(string hashtablePath, Dictionary hashtable) { using StreamReader reader = new(hashtablePath); - StringBuilder nameBuilder = new(); - while (reader.EndOfStream is false) { - string line = reader.ReadLine(); - string[] split = line.Split(' '); + while (reader.ReadLine() is string line) { + string[] split = line.Split(' ', 2); uint hash = uint.Parse(split[0], NumberStyles.HexNumber); - nameBuilder = nameBuilder.AppendJoin(' ', split.Skip(1)); - hashtable.TryAdd(hash, nameBuilder.ToString()); - nameBuilder.Clear(); + hashtable.TryAdd(hash, split[1]); } }