Класс System.Diagnostics.Stopwatch точно измеряет прошедшее время, но способ, которым работает метод ElapsedTicks, привел некоторых людей к выводу, что он не точен, когда у них действительно просто логическая ошибка в коде. 1001 *
Причина, по которой некоторые разработчики считают, что секундомер не точен, заключается в том, что ElapsedTicks от секундомера НЕ УРАВНЯЕТСЯ с тиками в DateTime.
Проблема возникает, когда код приложения использует ElapsedTicks для создания нового DateTime.
var watch = new Stopwatch();
watch.Start();
... (perform a set of operations)
watch.Stop();
var wrongDate = new DateTime(watch.ElapsedTicks); // This is the WRONG value.
При необходимости длительность секундомера можно преобразовать в DateTime следующим образом:
// This converts stopwatch ticks into DateTime ticks.
// First convert to TimeSpan, then convert to DateTime
var rightDate = new DateTime(watch.Elapsed.Ticks);
Вот статья, которая объясняет проблему более подробно:
http://geekswithblogs.net/BlackRabbitCoder/archive/2012/01/12/c.net-little-pitfalls-stopwatch-ticks-are-not-timespan-ticks.aspx