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;
@ -7,6 +9,10 @@ namespace Dalamud.Game.Config;
/// </summary>
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>
/// Gets the name of a SystemConfigOption from it's attribute.
/// </summary>
@ -14,7 +20,10 @@ internal static class GameConfigEnumExtensions
/// <returns>Name of the option.</returns>
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>
@ -24,7 +33,10 @@ internal static class GameConfigEnumExtensions
/// <returns>Name of the option.</returns>
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>
@ -34,6 +46,9 @@ internal static class GameConfigEnumExtensions
/// <returns>Name of the option.</returns>
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;
}
}