From 9dc2b3cd7625dec59d8b6a531aee8e170df22532 Mon Sep 17 00:00:00 2001 From: Pavlos Touboulidis Date: Wed, 23 Apr 2014 03:48:49 +0300 Subject: [PATCH] Optimize ComputeHash by removing Concat() and ToArray() calls --- OpenRA.Game/Map/Map.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 2c878bbeca..8e8bf27b4b 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -431,13 +431,20 @@ namespace OpenRA string ComputeHash() { // UID is calculated by taking an SHA1 of the yaml and binary data - // Read the relevant data into a buffer - var data = Container.GetContent("map.yaml").ReadAllBytes() - .Concat(Container.GetContent("map.bin").ReadAllBytes()).ToArray(); - // Take the SHA1 - using (var csp = SHA1.Create()) - return new string(csp.ComputeHash(data).SelectMany(a => a.ToString("x2")).ToArray()); + using (var ms = new MemoryStream()) + { + // Read the relevant data into the buffer + using (var s = Container.GetContent("map.yaml")) + s.CopyTo(ms); + using (var s = Container.GetContent("map.bin")) + s.CopyTo(ms); + + // Take the SHA1 + ms.Seek(0, SeekOrigin.Begin); + using (var csp = SHA1.Create()) + return new string(csp.ComputeHash(ms).SelectMany(a => a.ToString("x2")).ToArray()); + } } public void MakeDefaultPlayers()