Merge pull request #1300 from Caraxi/improveConfigPerformance

This commit is contained in:
goat 2023-07-05 23:13:04 +02:00 committed by GitHub
commit 2cf3b93b64
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

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