mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Cache version info strings
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user