diff --git a/Dalamud/Game/Config/GameConfigEnumExtensions.cs b/Dalamud/Game/Config/GameConfigEnumExtensions.cs index f880ee1b2..69087350b 100644 --- a/Dalamud/Game/Config/GameConfigEnumExtensions.cs +++ b/Dalamud/Game/Config/GameConfigEnumExtensions.cs @@ -1,4 +1,6 @@ -using Dalamud.Utility; +using System.Collections.Concurrent; + +using Dalamud.Utility; namespace Dalamud.Game.Config; @@ -7,6 +9,10 @@ namespace Dalamud.Game.Config; /// internal static class GameConfigEnumExtensions { + private static readonly ConcurrentDictionary SystemNameCache = new(); + private static readonly ConcurrentDictionary UIConfigNameCache = new(); + private static readonly ConcurrentDictionary UIControlNameCache = new(); + /// /// Gets the name of a SystemConfigOption from it's attribute. /// @@ -14,7 +20,10 @@ internal static class GameConfigEnumExtensions /// Name of the option. public static string GetName(this SystemConfigOption systemConfigOption) { - return systemConfigOption.GetAttribute()?.Name ?? $"{systemConfigOption}"; + if (SystemNameCache.TryGetValue(systemConfigOption, out var name)) return name; + name = systemConfigOption.GetAttribute()?.Name ?? $"{systemConfigOption}"; + SystemNameCache.TryAdd(systemConfigOption, name); + return name; } /// @@ -24,7 +33,10 @@ internal static class GameConfigEnumExtensions /// Name of the option. public static string GetName(this UiConfigOption uiConfigOption) { - return uiConfigOption.GetAttribute()?.Name ?? $"{uiConfigOption}"; + if (UIConfigNameCache.TryGetValue(uiConfigOption, out var name)) return name; + name = uiConfigOption.GetAttribute()?.Name ?? $"{uiConfigOption}"; + UIConfigNameCache.TryAdd(uiConfigOption, name); + return name; } /// @@ -34,6 +46,9 @@ internal static class GameConfigEnumExtensions /// Name of the option. public static string GetName(this UiControlOption uiControlOption) { - return uiControlOption.GetAttribute()?.Name ?? $"{uiControlOption}"; + if (UIControlNameCache.TryGetValue(uiControlOption, out var name)) return name; + name = uiControlOption.GetAttribute()?.Name ?? $"{uiControlOption}"; + UIControlNameCache.TryAdd(uiControlOption, name); + return name; } }