From d8e4f963c058525beb4f7763a65a2d6685b7c73e Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 5 Apr 2026 11:15:07 -0400 Subject: [PATCH] Statically cache item type names to avoid slowdowns --- SabreTools.Metadata.Filter/FilterKey.cs | 10 ++++++---- SabreTools.Metadata.Filter/FilterRunner.cs | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/SabreTools.Metadata.Filter/FilterKey.cs b/SabreTools.Metadata.Filter/FilterKey.cs index ee08f2e8..b8867fd8 100644 --- a/SabreTools.Metadata.Filter/FilterKey.cs +++ b/SabreTools.Metadata.Filter/FilterKey.cs @@ -18,6 +18,11 @@ namespace SabreTools.Metadata.Filter /// public readonly string FieldName; + /// + /// Cached item type names for filter selection + /// + private static readonly string[] _datItemTypeNames = TypeHelper.GetDatItemTypeNames(); + /// /// Validating combined key constructor /// @@ -149,12 +154,9 @@ namespace SabreTools.Metadata.Filter if (string.Equals(itemName, "datitem", StringComparison.OrdinalIgnoreCase) || string.Equals(itemName, "item", StringComparison.OrdinalIgnoreCase)) { - // Get all item types - var itemTypes = TypeHelper.GetDatItemTypeNames(); - // If we get any matches string localFieldName = fieldName; - string? matchedType = Array.Find(itemTypes, t => DatItemContainsField(t, localFieldName)); + string? matchedType = Array.Find(_datItemTypeNames, t => DatItemContainsField(t, localFieldName)); if (matchedType is not null) { // Check for a matching field diff --git a/SabreTools.Metadata.Filter/FilterRunner.cs b/SabreTools.Metadata.Filter/FilterRunner.cs index 433a3037..6d932b49 100644 --- a/SabreTools.Metadata.Filter/FilterRunner.cs +++ b/SabreTools.Metadata.Filter/FilterRunner.cs @@ -17,7 +17,7 @@ namespace SabreTools.Metadata.Filter /// /// Cached item type names for filter selection /// - private readonly string[] _datItemTypeNames = TypeHelper.GetDatItemTypeNames(); + private static readonly string[] _datItemTypeNames = TypeHelper.GetDatItemTypeNames(); public FilterRunner(FilterObject[] filters) {