C# - 新的 CultureInfo 实例化性能

标签 c# .net cultureinfo

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

var c = new CultureInfo("en-US", false);

重复实例化的性能如何?

最佳答案

有人会认为 C# 和/或 JIT 编译器中的优化器会聪明地识别循环不变表达式并在循环外重构。我倾向于自己进行此类重构,以使代码更清晰。

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

CultureInfo ci = CultureInfo.GetCultureInfo("en-US") ;

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

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

This [CultureInfo] object is required in many Date and String methods to force a specific culture when CurrentCulture may not be the right one.

使用 CultureInfo.InvariantCulture。这就是它存在的目的。

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

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 ;

关于C# - 新的 CultureInfo 实例化性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18902820/

相关文章:

c# - C# 中的进度监视器实现

c# - 跨进程(和机器)同步(信号量)

c# - 你能像在 .NET 中一样在 javascript 中获取文化信息字符串吗?

java - 一个询问您要使用哪个网络浏览器的程序

c# - 当函数属于必须解析的类时,如何向 IServiceCollection 注册委托(delegate)或函数?

c# - 如何从 C# 正确关闭 java 应用程序

c# - 删除节点及其子节点

C# 舍入到列表值

c# - 使用 CultureInfo 将 USD 符号替换为 -

c# - 使用精确解析转换英文日期