Cache version info strings

This commit is contained in:
Matt Nadareski
2024-12-17 01:05:41 -05:00
parent a86af8c32a
commit ed6556b1f0

View File

@@ -746,6 +746,11 @@ namespace SabreTools.Serialization.Wrappers
/// </summary>
private Models.PortableExecutable.VersionInfo? _versionInfo = null;
/// <summary>
/// Cached version info strings data
/// </summary>
private readonly Dictionary<string, string?> _versionInfoStrings = [];
/// <summary>
/// Cached assembly manifest data
/// </summary>
@@ -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
}