System.Diagnostics.Stopwatch - правильный класс для этой степени детализации вашего времени, но убедитесь, что вы используете свойство Elapsed.Ticks
вашего объекта Секундомер вместо его ElapsedTicks
свойство, так как это две разные вещи.
ElapsedTicks
(без точки) относится к числу тактов секундомера и, следовательно, должно использоваться совместно с Stopwatch.Frequency
(что не является одинаково на всех машинах) для расчета прошедшего времени.
Elapsed.Ticks
( с точкой) дает число Timespan
тиков и не зависит от частоты секундомера.
Это, вероятно, одна из самых тонких потенциальных ошибок в .Net.
Кроме того, помните, что секундомер является очень гранулированным, но это не обязательно все, что точно (в зависимости от вашего определения термина). Прошедшее время, возвращаемое секундомером, будет отклоняться от системного времени.
На моем ноутбуке секундомер работает почти на 5 секунд вперед за 24 часа, а на некоторых других машинах этот эффект еще хуже.
Если вы рассчитываете короткие промежутки времени, конечно, этот эффект не должен иметь большого значения.