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