我在我的电脑中将文化改为波斯语,之后我的应用程序加载数据库因为这行而加载了大约五次:
Convert.ToDateTime(someString)
什么是问题?我应该怎么做才能解决它?
UPD1:字符串2010-08-03 00:00:00.000
UPD2:我使用以下代码进行测量:
string s = "2010-08-03 00:00:00.000";
DateTime start = DateTime.Now;
int n = (int)5e6;
for (int i = 0; i < n; i++)
{
DateTime date = Convert.ToDateTime(s);
}
DateTime finish = DateTime.Now;
Console.WriteLine(finish - start);
Console.ReadKey();
默认(AD)日历中的:( ~5秒)
零点05分48秒
当我在Windows 10中将日历更改为波斯语时:(约4分钟)
03:51:73
答案 0 :(得分:1)
没有记录,所以这在任何时候都可能是错误的,但我猜测DateTime.Parse(或Convert.ToDateTime)将尝试所有可用格式(在当前文化中)来解析字符串。它只是从与你的字符串不匹配的格式开始。因此,在找到正确的一个之前有几个失败。这导致完成该过程的时间更长。
为了获得准确(大致)相同的效果,我建议您使用DateTime.ParseExact
或DateTime.TryParseExact
并指定文化不变格式。例如:
string s = "2010-08-03 00:00:00.000";
string format = "yyyy-MM-dd HH:mm:ss.fff";
DateTime date = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture);
参考:Is DateTime.ParseExact() faster than DateTime.Parse()。但请注意,接受的答案是不正确的。