Производительность DateTime.Add (TimeSpan) по сравнению с методами DateTime.AddDays / Hours / etc * - PullRequest
2 голосов
/ 07 декабря 2009

Есть ли разница в производительности при использовании DateTime.Add(TimeSpan) против DateTime.AddDays(double), DateTime.AddHours(double) и т. Д.?

Ответы [ 3 ]

5 голосов
/ 07 декабря 2009

Add (TimeSpan) вызывает AddTicks напрямую с элементом ._ticks TimeSpan. AddDays и т. Д. Выполните проверку умножения и диапазона, затем вызовите AddTicks. Так что Add (TimeSpan), вероятно, немного быстрее, но почти наверняка незначительно: все будет ослепительно быстро.

2 голосов
/ 07 декабря 2009

Этот простой тест указывает, что использование TimeSpan может быть немного быстрее, но оба очень быстры, выполняя 10 миллионов итераций за секунду. Время выполнения будет зависеть от других аспектов вашего кода.

[MethodImpl(MethodImplOptions.NoOptimization)] 
static void Main(string[] args)
{
    Stopwatch sw= new Stopwatch();
    DateTime d = DateTime.Now;
    sw.Start();
    for (int i = 0; i < 10000000; i++)
    {
        DateTime d2 = d.AddHours(10);
    }
    sw.Stop();
    Console.WriteLine(sw.Elapsed);

    sw.Reset();
    sw.Start();
    for (int i = 0; i < 10000000; i++)
    {
        DateTime d2 = d + new TimeSpan(10, 0, 0);
    }
    sw.Stop();
    Console.WriteLine(sw.Elapsed);
}

// Core2 Duo, Win7. Коэффициент сохраняется при повторных испытаниях
00: 00: 00.4880733 // AddHours
00: 00: 00.4404034 // добавляем TimeSpan

0 голосов
/ 07 декабря 2009

dattimeadd (временной интервал), на самом деле, немного быстрее, чем datetime.adddays и addhours, но этого недостаточно, чтобы иметь значение практически в любом практическом случае. На 500 000 итераций это неокончательно. При 2 000 000 итераций вы можете увидеть разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...