Влияет ли Environment.TickCount на изменения системного времени? - PullRequest
3 голосов
/ 07 декабря 2009

Мне интересно, как реализовано свойство .NET BCL Environment.TickCount. В частности, я хотел бы сейчас, если на него влияют настройки системного времени .

Моим первым предположением о том, как реализовано свойство, было то, что это была просто управляемая оболочка для метода GetTickCount . Однако в документации для метода GetTickCount говорится, что на влияют корректировки, сделанные функцией GetSystemTimeAdjustment , но в документации для Environment.TickCount ничего не говорится о корректировки времени.

Я пытаюсь выяснить, можно ли использовать Environment.TickCount в качестве (хотя и с низкой точностью) постоянно увеличивающегося значения времени.

Ответы [ 2 ]

4 голосов
/ 07 декабря 2009

Нет, Environment.TickCount не зависит от настройки системного времени. Это была моя интерпретация документации, но мое любопытство потребовало более веских доказательств, поэтому я выполнил следующий код при настройке системы назад и вперед один час:

while (true)
{
    Console.WriteLine(Environment.TickCount);
    Thread.Sleep(1000); 
}

... и вывод показал идеальную последовательность, на которую не влияли корректировки времени.

Обновление
Поэтому я сделал еще домашнюю работу, вызванную вопросом Маркуса в комментариях ниже. Я вполне уверен (хотя и не смог подтвердить), что Environment.TickCount выполняет вызов GetTickCount, для которого в документации указано следующее:

Разрешение GetTickCount функция ограничена разрешением системного таймера, который как правило, в диапазоне 10 миллисекунд до 16 миллисекунд. разрешение GetTickCount На функцию также влияет корректировки, сделанные Функция GetSystemTimeAdjustment.

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

2 голосов
/ 07 декабря 2009

Нет, это не зависит от настройки системного времени.

Подходит ли оно для «постоянно растущего значения времени», зависит от ваших точных требований. Из документации MSDN :

Значение этого свойства получено от системного таймера и сохраняется как 32-разрядное целое число со знаком. Как следствие, если система работает непрерывно, TickCount будет увеличиваться с нуля до Int32.MaxValue примерно 24,9 дня, затем перейдите к Int32.MinValue, который является отрицательное число, затем приращение назад в ноль в течение следующих 24,9 дней.

...