C # TimeSpan.FromTicks () неточно?

Я уже некоторое время использую C # для создания небольшой игры, и во время тестирования этой игры на другом ПК я столкнулся с некоторыми странными проблемами с истекшим временем.

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

Я обнаружил, что проблема связана с созданием TimeSpan с помощью метода FromTicks () .Я провел небольшой тест, используя следующий код:

class Program
{
    static void Main(string[] args)
    {
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
        sw.Stop();
        TimeSpan t = TimeSpan.FromTicks(sw.ElapsedTicks);
        Console.WriteLine(t.ToString());
        Console.WriteLine(sw.Elapsed.ToString());
        Console.ReadKey();
    }
}

На моем основном ПК я запустил эту программу и получил следующее:

    00:00:00.3528353
    00:00:00.9856987

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

Затем я запустил ту же программу на другом компьютере и получил следующее:

    00:03:20.6866734
    00:00:00.998287

Я был весьма поражен.

Мой вопрос здесь не в том, как я могу исправить эту проблему. Я уже решил использовать второй метод, потому что он достаточно точен ... скорее, я прошу просветления.

Как такое может быть? Почему первый результат такой неточный? Почему это сильно различается на разных машинах?

Я проверил msdn на случай, если я неправильно использовал метод, но приведенные там примеры показывают, что мои результаты должны быть невозможны ...

Примечание :
Я думаю, что батарея CMOS умирает / разряжена, это фактор?

6
задан Robert Harvey 7 August 2013 в 19:00
поделиться