12
for (int i = 0; i < threads.Length; i++)
threads[i] = Proc-
ess.GetCurrentProcess().Threads[i].
UserProcessorTime;
}
public void StopTime()
{
TimeSpan tmp;
for (int i = 0; i < threads.Length; i++)
{
tmp = Proc-
ess.GetCurrentProcess().Threads[i].
UserProcessorTime.Subtract(threads[i]);
if (tmp > TimeSpan.Zero)
duration = tmp;
}
}
public TimeSpan Result()
{
return duration;
}
}
Класс
Timing имеет два поля:
duration – для
хранения результата
измерения и
поле-массив threads, в котором
хранятся значения времени,
соответствующие началу измерения для всех потоков процесса. Необходи-
мость наличия такой информации связана с тем, что заранее невозможно ска-
зать, какому из потоков процесса будет поручено выполнение интересующе-
го нас программного кода. Инициализация массива
threads осуществляет-
12 / 23
13
ся в
методе StartTime после вызова сборщика мусора. В методе
Stop-
Time
производится повторный запрос текущего времени для всех процессов
и выбирается тот из них, у которого результат оказывается отличным от ис-
ходного значения. Именно этот процесс и выполнял исследуемый код.
Листинг 1.4 содержит код функции, в которой используются два спосо-
ба измерения времени выполнения одного и того же алгоритма сортировки.
Do'stlaringiz bilan baham: