C# - 新的CultureInfo实例化性能

Vin*_*ent 6 .net c# cultureinfo

我想知道在循环过程中重复实例化一个CultureInfo对象是否是一个好习惯(几千次).当CurrentCulture可能不正确时,许多Date和String方法都需要此对象来强制特定区域性.

var c = new CultureInfo("en-US", false);
Run Code Online (Sandbox Code Playgroud)

重复实例化的表现是什么?

Nic*_*rey 10

有人会认为C#和/或JIT编译器中的优化器会有智能识别循环不变的表达式并在循环之外重构.我倾向于自己做这样的重构,因为这样可以使代码更清晰.

更好的是,使用这种方法:

CultureInfo ci = CultureInfo.GetCultureInfo("en-US") ;
Run Code Online (Sandbox Code Playgroud)

它为您提供了一个缓存的只读实例,该实例将只构造一次,然后从缓存中检索.

更好的是,为了您的目的:

CultureInfo当CurrentCulture可能不正确时,许多Date和String方法都需要此[ ]对象来强制特定的文化.

CultureInfo.InvariantCulture.这就是它的存在.

第三种选择是创建一个静态CultureInfo属性,其中包含对您的后备文化的单例引用.根据您的目的,您可能希望将其标记为线程本地(static方法CultureInfo是线程安全的;实例方法不是).这样的推动可能看起来像这样:

public static string FallbackCultureId { get { return Configuration.AppSettings["FallbackConfigurationId"] ; } }

public static CultureInfo FallbackCultureInfo
{
  get { return fallBackCultureInfo ?? (fallBackCultureInfo=new CultureInfo(FallbackCultureId)) ; }            
}
[ThreadStatic] private static CultureInfo fallBackCultureInfo ;
Run Code Online (Sandbox Code Playgroud)