为什么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 转换日期时间中的字符串
一点优化
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
对象。