From ed6556b1f00a1745b5e9e0a892e83705f55465d7 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 17 Dec 2024 01:05:41 -0500 Subject: [PATCH] Cache version info strings --- .../Wrappers/PortableExecutable.cs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/SabreTools.Serialization/Wrappers/PortableExecutable.cs b/SabreTools.Serialization/Wrappers/PortableExecutable.cs index 534d5d03..cf721cc3 100644 --- a/SabreTools.Serialization/Wrappers/PortableExecutable.cs +++ b/SabreTools.Serialization/Wrappers/PortableExecutable.cs @@ -746,6 +746,11 @@ namespace SabreTools.Serialization.Wrappers /// private Models.PortableExecutable.VersionInfo? _versionInfo = null; + /// + /// Cached version info strings data + /// + private readonly Dictionary _versionInfoStrings = []; + /// /// Cached assembly manifest data /// @@ -842,6 +847,10 @@ namespace SabreTools.Serialization.Wrappers if (string.IsNullOrEmpty(key)) return null; + // If we have the value cached + if (_versionInfoStrings.ContainsKey(key)) + return _versionInfoStrings[key]; + // Ensure that we have the resource data cached if (ResourceData == null) return null; @@ -862,17 +871,22 @@ namespace SabreTools.Serialization.Wrappers // Return the match if found match = Array.Find(st.Children, sd => sd != null && key.Equals(sd.Key, StringComparison.OrdinalIgnoreCase)); if (match != null) - return match.Value?.TrimEnd('\0'); + { + _versionInfoStrings[key] = match.Value?.TrimEnd('\0'); + return _versionInfoStrings[key]; + } } - return null; + _versionInfoStrings[key] = null; + return _versionInfoStrings[key]; #else var match = stringTable .SelectMany(st => st?.Children ?? []) .FirstOrDefault(sd => sd != null && key.Equals(sd.Key, StringComparison.OrdinalIgnoreCase)); // Return either the match or null - return match?.Value?.TrimEnd('\0'); + _versionInfoStrings[key] = match?.Value?.TrimEnd('\0'); + return _versionInfoStrings[key]; #endif }