Разница между 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() должен сделать это