Разница между ElapsedTicks, ElapsedMilliseconds, Elapsed.Milliseconds и Elapsed.TotalMilliseconds?(С #) - PullRequest
35 голосов
/ 17 января 2012

Я полностью запутался между этими 4. В чем разница между ElapsedMilliseconds (long), ElapsedTicks (long), Elapsed.TotalMilliseconds (double) и Elapsed.Milliseconds (int)?

У меня есть функция

    {
        Stopwatch sw = new Stopwatch();

        sw.Start();
        MyTimeConsumingAction();
        sw.Stop();

        sw.//what?
    }

Как получить правильное время, затрачиваемое моим длительным процессом из истекшего свойства объекта Секундомер в миллисекундах?

Редактировать: я пробовал документацию по msdn, но там нет ничего подробного ..

Ответы [ 4 ]

48 голосов
/ 17 января 2012

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, но не корректным в контексте класса Секундомер. См. Секундомер. ElapsedTicks на MSDN.

ElapsedMilliseconds возвращает округленное число с точностью до ближайшей полной миллисекунды, поэтому может отсутствовать точность, которую может дать свойство Elapsed.TotalMilliseconds.

Elapsed.TotalMilliseconds - это двойное число, которое может возвращать время выполнения в частичную миллисекунду, тогда как ElapsedMilliseconds равно Int64. например секундомер с 0,0007 миллисекундами вернул бы 0, или 1234,56 миллисекунд вернул бы 1234 в этом свойстве. Поэтому для точности всегда используйте Elapsed.TotalMilliseconds.

См. Секундомер. Прошедшие миллисекунды на MSDN для уточнения.

С уважением,

7 голосов
/ 17 января 2012

Отражение класса Секундомер показывает, что ElapsedMilliseconds - это Elapsed тики, преобразованные (и округленные) в миллисекунды:

public TimeSpan Elapsed
{
  get
  {
    return new TimeSpan(this.GetElapsedDateTimeTicks());
  }
}

public long ElapsedMilliseconds
{
  get
  {
    return this.GetElapsedDateTimeTicks() / 10000L;
  }
}
3 голосов
/ 17 января 2012

в кратком объяснении от msdn :

ElapsedMilliseconds

Это свойство представляет прошедшее время, округленное до ближайшего целого значения в миллисекундах. Для более точных измерений используйте свойства Elapsed или ElapsedTicks.

ElapsedTicks

Это свойство представляет количество прошедших тиков в базовом механизме таймера. Тик - это самая маленькая единица времени, которую может измерить таймер секундомера. Используйте поле «Частота», чтобы преобразовать значение ElapsedTicks в количество секунд.

Elapsed

Используйте свойство Elapsed, чтобы извлечь значение прошедшего времени, используя методы и свойства TimeSpan. Например, вы можете отформатировать возвращенный экземпляр TimeSpan в текстовое представление или передать его другому классу, для которого требуется параметр TimeSpan.

1 голос
/ 17 января 2012

Elapsed - это TimeSpan.Если вы хотите отобразить время, просто Elapsed.ToString() должен сделать это

...