Разница между ElapsedTicks, ElapsedMilliseconds, Elapsed.Milliseconds и Elapsed.TotalMilliseconds? (С#)
Я полностью смущен между ними 4. В чем разница между ElapsedMilliseconds (long), ElapsedTicks (long), Elapsed.TotalMilliseconds(double) и Elapsed.Milliseconds(int)?
У меня есть функция
{
Stopwatch sw = new Stopwatch();
sw.Start();
MyTimeConsumingAction();
sw.Stop();
sw.//what?
}
Как получить правильное время, затраченное на мой длительный процесс, из истекшего свойства объекта Секундомер в миллисекундах?
Изменить: я пробовал документацию msdn, но там ничего там не было.
Ответы
Ответ 1
Elapsed.TotalMilliseconds(double) возвращает общее количество целых и дробных миллисекунд, прошедших с момента создания
Например, секундомер, остановленный за 1,23456 секунд, вернет 1234,56 в этом свойстве. См. TimeSpan.TotalMilliseconds на MSDN
Elapsed.Milliseconds(int) возвращает количество целых миллисекунд в текущей секунде
Например, секундомер на 1,234 секунды вернет 234 в этом свойстве. Смотрите TimeSpan.Milliseconds
ElapsedTicks (long) возвращает тики с момента запуска секундомера.
В контексте исходного вопроса, относящегося к классу Секундомер, ElapsedTicks - это количество прошедших тиков. Тики происходят со скоростью Stopwatch.Frequency, поэтому для подсчета истекших секунд рассчитайте: numSeconds = stopwatch.ElapsedTicks/Stopwatch.Frequency.
Старый ответ определял тики как число 100 наносекундных периодов, что является правильным в контексте класса DateTime, но не корректным в контексте класса Секундомер. См. Секундомер. Истекшие тики на MSDN.
ElapsedMilliseconds возвращает округленное число с точностью до ближайшей полной миллисекунды, поэтому может отсутствовать точность, которую может дать свойство Elapsed.TotalMilliseconds.
Elapsed.TotalMilliseconds - это двойное число, которое может возвращать время выполнения в частичную миллисекунду, тогда как ElapsedMilliseconds равно Int64. например, секундомер с 0,0007 миллисекундами вернет 0, или 1234,56 миллисекунд вернет 1234 в этом свойстве. Поэтому для точности всегда используйте Elapsed.TotalMilliseconds.
См. Секундомер .ElapsedMilliseconds на MSDN для разъяснения.
С наилучшими пожеланиями,
Ответ 2
Отражение класса секундомера показывает, что ElapsedMilliseconds - это пропущенные тики, преобразованные (и округленные) в миллисекунды:
public TimeSpan Elapsed
{
get
{
return new TimeSpan(this.GetElapsedDateTimeTicks());
}
}
public long ElapsedMilliseconds
{
get
{
return this.GetElapsedDateTimeTicks() / 10000L;
}
}
Ответ 3
в кратком объяснении от msdn:
ElapsedMilliseconds
Это свойство представляет собой прошедшее время, округленное до ближайшего целого миллисекундного значения. Для более точных измерений используйте свойства Elapsed или ElapsedTicks.
ElapsedTicks
Это свойство представляет количество прошедших тиков в базовом таймерном механизме. Тик - это наименьшая единица времени, которую может измерить таймер секундомера. Используйте поле Frequency, чтобы преобразовать значение ElapsedTicks в несколько секунд.
Elapsed
Используйте свойство Elapsed для извлечения искомого значения времени с использованием методов и свойств TimeSpan. Например, вы можете отформатировать возвращаемый экземпляр TimeSpan в текстовое представление или передать его другому классу, для которого требуется параметр TimeSpan.
Ответ 4
Elapsed
TimeSpan
. Если вы хотите отобразить время, просто Elapsed.ToString()
должен сделать это