DateTime.UtcNow не меняется, почему? - PullRequest
0 голосов
/ 08 декабря 2011

проверьте код

        StringBuilder s = new StringBuilder();
        for (var i = 0; i < 100; i++)
        {
            TimeSpan t = (DateTime.UtcNow - new DateTime(2010, 1, 1));
            ulong timestamp = (ulong)(t.TotalMilliseconds * 100000000);
            s.Append("<li>" + timestamp.ToString());
        }

Вы получите один и тот же результат 100 раз, это означает, что DateTime.UtcNow никогда не изменится, даже если я умножу миллисекунды на 100000000 раз.

Кто-нибудь знает, как каждый раз получать свежие DateTime.UtcNow?

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

В такой тесной петле шансы действительно хороши, что вы получите то же самое время.

Каждый тик в свойстве Ticks представляет срез в 100 наносекунд. Ваш код будет повторяться быстрее, чем это.

0 голосов
/ 15 мая 2016

Лучший способ - использовать класс System.Diagnostics.Stopwatch для измерения промежутка времени с высоким разрешением. На большинстве компьютеров тактовый интервал по умолчанию составляет 15,625 мс, что означает, что в пределах тактового интервала разница двух временных меток, полученных с помощью DateTime.UtcNow, будет равна 0. Stopwatch использует счетчик перфорации всякий раз, когда он доступен (т.е. на большинстве ПК), а разрешение обычно меньше 1 сша. Подробнее см. Измерение временного интервала в управляемом коде .

0 голосов
/ 08 декабря 2011

Я просто поместил ваш фрагмент в LinqPad и добавил t.TotalMilliseconds.Dump() прямо перед концом цикла for, вот первые несколько результатов:

61068982141.4911    
61068982143.9916    
61068982143.9916    
61068982144.4917    
61068982144.4917    
61068982144.4917    
61068982144.4917    
61068982144.9918    
61068982144.9918    
61068982144.9918    
61068982144.9918    
61068982145.4919    
61068982145.4919    
61068982145.4919    
61068982145.4919    
61068982145.992    
61068982145.992    
61068982145.992    
61068982145.992

Цикл выполняется довольно быстро, после десятичной дроби вы видите дробное число мс.

...