Remove RequestCulture caching as perf testing shows it has no benefit
This commit is contained in:
parent
5f12c3b1e3
commit
d22adcbef0
|
|
@ -15,7 +15,7 @@ namespace Microsoft.AspNet.Localization
|
|||
public class AcceptLanguageHeaderRequestCultureStrategy : RequestCultureStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// The maximum number of values in the Accept-Language header to attempt to create a <see cref="CultureInfo"/>
|
||||
/// The maximum number of values in the Accept-Language header to attempt to create a <see cref="System.Globalization.CultureInfo"/>
|
||||
/// from for the current request.
|
||||
/// Defaults to <c>3</c>.
|
||||
/// </summary>
|
||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Localization
|
|||
var culture = CultureInfoCache.GetCultureInfo(language.Value);
|
||||
if (culture != null)
|
||||
{
|
||||
var requestCulture = RequestCulture.GetRequestCulture(culture);
|
||||
var requestCulture = new RequestCulture(culture);
|
||||
|
||||
requestCulture = ValidateRequestCulture(requestCulture);
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ namespace Microsoft.AspNet.Localization
|
|||
return null;
|
||||
}
|
||||
|
||||
return RequestCulture.GetRequestCulture(culture, uiCulture);
|
||||
return new RequestCulture(culture, uiCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Localization
|
|||
return null;
|
||||
}
|
||||
|
||||
var requestCulture = RequestCulture.GetRequestCulture(culture, uiCulture);
|
||||
var requestCulture = new RequestCulture(culture, uiCulture);
|
||||
|
||||
requestCulture = ValidateRequestCulture(requestCulture);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Concurrent;
|
||||
using System.Globalization;
|
||||
using Microsoft.Framework.Internal;
|
||||
|
||||
|
|
@ -12,15 +11,24 @@ namespace Microsoft.AspNet.Localization
|
|||
/// </summary>
|
||||
public class RequestCulture
|
||||
{
|
||||
private static readonly ConcurrentDictionary<CacheKey, RequestCulture> _cache = new ConcurrentDictionary<CacheKey, RequestCulture>();
|
||||
|
||||
private RequestCulture([NotNull] CultureInfo culture)
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="RequestCulture"/> object has its <see cref="Culture"/> and <see cref="UICulture"/>
|
||||
/// properties set to the same <see cref="CultureInfo"/> value.
|
||||
/// </summary>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> for the request.</param>
|
||||
public RequestCulture([NotNull] CultureInfo culture)
|
||||
: this (culture, culture)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private RequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture)
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="RequestCulture"/> object has its <see cref="Culture"/> and <see cref="UICulture"/>
|
||||
/// properties set to the respective <see cref="CultureInfo"/> values provided.
|
||||
/// </summary>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> for the request to be used for formatting.</param>
|
||||
/// <param name="uiCulture">The <see cref="CultureInfo"/> for the request to be used for text, i.e. language.</param>
|
||||
public RequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture)
|
||||
{
|
||||
Culture = culture;
|
||||
UICulture = uiCulture;
|
||||
|
|
@ -35,66 +43,5 @@ namespace Microsoft.AspNet.Localization
|
|||
/// Gets the <see cref="CultureInfo"/> for the request to be used for text, i.e. language;
|
||||
/// </summary>
|
||||
public CultureInfo UICulture { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a cached <see cref="RequestCulture"/> instance that has its <see cref="Culture"/> and <see cref="UICulture"/>
|
||||
/// properties set to the same <see cref="CultureInfo"/> value.
|
||||
/// </summary>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> for the request.</param>
|
||||
public static RequestCulture GetRequestCulture([NotNull] CultureInfo culture)
|
||||
{
|
||||
return GetRequestCulture(culture, culture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a cached <see cref="RequestCulture"/> instance that has its <see cref="Culture"/> and <see cref="UICulture"/>
|
||||
/// properties set to the respective <see cref="CultureInfo"/> values provided.
|
||||
/// </summary>
|
||||
/// <param name="culture">The <see cref="CultureInfo"/> for the request to be used for formatting.</param>
|
||||
/// <param name="uiCulture">The <see cref="CultureInfo"/> for the request to be used for text, i.e. language.</param>
|
||||
/// <returns></returns>
|
||||
public static RequestCulture GetRequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture)
|
||||
{
|
||||
var key = new CacheKey(culture, uiCulture);
|
||||
return _cache.GetOrAdd(key, k => new RequestCulture(culture, uiCulture));
|
||||
}
|
||||
|
||||
private class CacheKey
|
||||
{
|
||||
private readonly int _hashCode;
|
||||
|
||||
public CacheKey(CultureInfo culture, CultureInfo uiCulture)
|
||||
{
|
||||
Culture = culture;
|
||||
UICulture = uiCulture;
|
||||
_hashCode = new { Culture, UICulture }.GetHashCode();
|
||||
}
|
||||
|
||||
public CultureInfo Culture { get; }
|
||||
|
||||
public CultureInfo UICulture { get; }
|
||||
|
||||
public bool Equals(CacheKey other)
|
||||
{
|
||||
return Culture == other.Culture && UICulture == other.UICulture;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
var other = obj as CacheKey;
|
||||
|
||||
if (other != null)
|
||||
{
|
||||
return Equals(other);
|
||||
}
|
||||
|
||||
return base.Equals(obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return _hashCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@ namespace Microsoft.AspNet.Localization
|
|||
|
||||
if (Options.SupportedCultures != null && !Options.SupportedCultures.Contains(result.Culture))
|
||||
{
|
||||
result = RequestCulture.GetRequestCulture(Options.DefaultRequestCulture.Culture, result.UICulture);
|
||||
result = new RequestCulture(Options.DefaultRequestCulture.Culture, result.UICulture);
|
||||
}
|
||||
|
||||
if (Options.SupportedUICultures != null && !Options.SupportedUICultures.Contains(result.UICulture))
|
||||
{
|
||||
result = RequestCulture.GetRequestCulture(result.Culture, Options.DefaultRequestCulture.UICulture);
|
||||
result = new RequestCulture(result.Culture, Options.DefaultRequestCulture.UICulture);
|
||||
}
|
||||
|
||||
if (requestCulture.Culture != result.Culture && requestCulture.UICulture != result.UICulture)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ namespace Microsoft.AspNet.Localization
|
|||
public async Task Invoke([NotNull] HttpContext context)
|
||||
{
|
||||
var requestCulture = _options.DefaultRequestCulture ??
|
||||
RequestCulture.GetRequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
|
||||
new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
|
||||
|
||||
IRequestCultureStrategy winningStrategy = null;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Localization
|
|||
/// </summary>
|
||||
public RequestLocalizationOptions()
|
||||
{
|
||||
DefaultRequestCulture = RequestCulture.GetRequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
|
||||
DefaultRequestCulture = new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
|
||||
|
||||
RequestCultureStrategies = new List<IRequestCultureStrategy>
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue