为什么DateTime.TryParse的文化性US和AdjustToUniversal如此缓慢

本文关键字:AdjustToUniversal 缓慢 US DateTime TryParse 文化性 为什么 | 更新日期: 2023-09-27 18:19:39

这里有两个测试,第一个使用:

  • DateTime.TryParse(dateToParse,过期)

        var dateToParse = "2012-09-17";
        var startNew = Stopwatch.StartNew();
        for (int i = 0; i < 4059; i++)
        {
            DateTime date;
            if (!DateTime.TryParse(dateToParse, out date))
                continue;
    
        }
        Console.WriteLine(startNew.GetTimeString()); 
    

->输出:19.1ms闪电快速

第二个使用:

  • DateTime.TryParse(dateToParse,new CultureInfo("en-US"),DateTimeStyles.AdjustToUniversal,过期)

        var dateToParse = "2012-09-17";
        var startNew = Stopwatch.StartNew();
        for (int i = 0; i < 4059; i++)
        {
            DateTime date;
            if (!DateTime.TryParse(dateToParse, new CultureInfo("en-US"), DateTimeStyles.AdjustToUniversal, out date))
                continue;
    
        }
        Console.WriteLine(startNew.GetTimeString()); 
    

->输出:11,6s真的很慢!!!

两个问题。

1-为什么在美国文化中转换如此缓慢

2-我可以使用什么替代解决方案来使用US Culture 转换日期时间中的字符串

为什么DateTime.TryParse的文化性US和AdjustToUniversal如此缓慢

一点优化

var dateToParse = "2012-09-17";
CultureInfo ci = new CultureInfo("en-US");
var startNew = Stopwatch.StartNew();
for (int i = 0; i < 4059; i++)
{
    DateTime date;
    if (!DateTime.TryParse(dateToParse, ci, DateTimeStyles.AdjustToUniversal, out date))
        continue;
}

第一个例子和第二个例子的区别都在于新的CultureInfo
在进入循环之前只创建一次它将大大减少所需的时间。

然而,当在IDE之外编译和执行原始代码时,我会很好奇地看到它们的真实性能。JITter可能会自行进行此优化。

这是因为您要创建4059个对象,特别是在表示new CultureInfo("en-US")的位中。

在循环之外声明US CultureInfo对象。

相关文章:
  • 没有找到相关文章