Я уже некоторое время использую 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 умирает / разряжена, это фактор?