当文化发生变化时,Convert.ToDateTime运行缓慢

时间:2016-09-28 08:54:49

标签: c# datetime culture

我在我的电脑中将文化改为波斯语,之后我的应用程序加载数据库因为这行而加载了大约五次:

  

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

1 个答案:

答案 0 :(得分:1)

没有记录,所以这在任何时候都可能是错误的,但我猜测DateTime.Parse(或Convert.ToDateTime)将尝试所有可用格式(在当前文化中)来解析字符串。它只是从与你的字符串不匹配的格式开始。因此,在找到正确的一个之前有几个失败。这导致完成该过程的时间更长。

为了获得准确(大致)相同的效果,我建议您使用DateTime.ParseExactDateTime.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()。但请注意,接受的答案是不正确的。