Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Работа с таймером


Автор: max-anikin 1.2.2005, 21:20
Стоит такая простенькая задачка (на первый взгляд) smile ... Нужно отследить время, затраченное на выполнение каких-то функций ... каким образом это лучше реализовать ?? Пытался двумя способами:
1. Используя System.Timers.Timer задавал Timer.Interval = 1 на Elapsed вешал функцию увеличивающую некоторый счетчик. Затем Timer.Start() Timer.Stop() и получал в счетчике время в миллисекундах которое прошло.
2. Написал небольшой классик. На старте функции засекал текущую дату в конце функции опять текущую дату и получал разницу.

Код

public class LifeTimeCounter
{
 private DateTime _Start;
 private DateTime _End;
 private TimeSpan _WorkingInterval;

 public double WorkingInterval
 {
  get { return _WorkingInterval.Milliseconds; }
 }

 public void Start() { _Start = DateTime.Now; }

 public void Reset() { _WorkingInterval = TimeSpan.Zero; }

 public void Stop()
 {
  _End = DateTime.Now;
  _WorkingInterval = _End - _Start;
 }
}

затем где-то
Код

private void ExpandOrSelchange(string selNodeIndex)
 {
  try
  {
   LifeTimeCounter Expand = new LifeTimeCounter();
   Expand.Start();
                       ...
   Expand.Stop();
   GTrace.LogInfo(String.Format("Expand Node function works {0} ms", Expand.WorkingInterval));
}


проблема в том что интервалы разные получались. И я не знаю в чем трабл. Может использовать таймеры и в поток его отдельный запихать ... или как его лучше сделать чтобы четко получить временной интервал.

Автор: Domestic Cat 1.2.2005, 21:42
Самый простой вариант - поставить до метода и после DateTime.Now.Millisecond и вычесть.

Цитата(max @ 1.2.2005, 12:20)
проблема в том что интервалы разные получались.


Естественно. Время выполнения метода - не постоянная величина, она может зависеть от чего угодно, например от загрузки процессора на данный момент.

Автор: Coocky 1.2.2005, 22:06
Цитата
проблема в том что интервалы разные получались. И я не знаю в чем трабл

Эта тема уже давно обсуждалась.Я давно говорил-не надо вычислять таймеры с точНОСТЬЮ ,как в NASA!Бесполезно!
Domestic Cat
Цитата
Естественно. Время выполнения метода - не постоянная величина, она может зависеть от чего угодно, например от загрузки процессора на данный момент.

Абсолютно правильно!Небось хочешь проверить насколько быстра твоя функция?Так для этого есть в студии утилитка в отладке...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)