这是两个测试, 第一个使用:
DateTime.TryParse(dateToParse,out date)
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());
- &GT;输出:19,1 ms 快速闪电
第二个使用:
DateTime.TryParse(dateToParse,new CultureInfo(“en-US”),DateTimeStyles.AdjustToUniversal,out date)
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());
- &GT;输出:11,6秒真的很慢!!!
两个问题。
1 - 为什么在美国文化中转换如此缓慢
2 - 我可以使用哪种替代解决方案将日期时间字符串转换为US-Culture
答案 0 :(得分:6)
一点优化
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可能会自行进行优化。
答案 1 :(得分:4)
这是因为您正在创建4059个对象 - 特别是在new CultureInfo("en-US")
位。
在循环之外声明US CultureInfo
对象。