我想知道在循环过程中重复实例化 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
属性,其中包含对您的后备文化的单例引用。根据您的目的,您可能希望将其标记为线程本地(CultureInfo
的static
方法是线程安全的;实例方法不是)。这样的属性可能看起来像这样:
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/