diff --git a/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs b/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs index 380add03a3ad..db4457d93c57 100644 --- a/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs +++ b/src/Localization/Localization/src/ResourceManagerStringLocalizerFactory.cs @@ -153,13 +153,19 @@ public IStringLocalizer Create(Type resourceSource) throw new ArgumentNullException(nameof(resourceSource)); } - var typeInfo = resourceSource.GetTypeInfo(); - - var baseName = GetResourcePrefix(typeInfo); + // Get without Add to prevent unnecessary lambda allocation + if (!_localizerCache.TryGetValue(resourceSource.AssemblyQualifiedName!, out var localizer)) + { + var typeInfo = resourceSource.GetTypeInfo(); + var baseName = GetResourcePrefix(typeInfo); + var assembly = typeInfo.Assembly; - var assembly = typeInfo.Assembly; + localizer = CreateResourceManagerStringLocalizer(assembly, baseName); + + _localizerCache[resourceSource.AssemblyQualifiedName!] = localizer; + } - return _localizerCache.GetOrAdd(baseName, _ => CreateResourceManagerStringLocalizer(assembly, baseName)); + return localizer; } ///