Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Листинг 1.2. Измерение времени выполнения с помощью Stopwatch


Download 1.85 Mb.
Pdf ko'rish
bet8/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   4   5   6   7   8   9   10   11   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

Листинг 1.2. Измерение времени выполнения с помощью Stopwatch 
const int n = 10000; 
static void Main(string[] args) 

int[] a = new int[n]; 
Random rnd = new Random(); 
for (int i = 0; i < n; i++) 
a[i] = rnd.Next() % 500; 
Stopwatch stpWatch = new Stopwatch(); 
stpWatch.Start(); 
9 / 23


10 
// 
здесь тестируемый код 
stpWatch.Stop(); 
Console.WriteLine("StopWatch: " + 
stpWatch.ElapsedMilliseconds.ToString()); 
Console.ReadLine(); 

Описанный способ измерения времени выполнения программного кода 
имеет один существенный недостаток: предполагается, что в течение всего 
времени измерения процессор выполняет только этот код. Однако в многоза-
дачных средах современных операционных систем это далеко не так. Далее 
будет описан другой способ измерения времени выполнения, свободный от 
указанного недостатка [40]. 
1.3.2. 
И
ЗМЕРЕНИЕ 
НА 
УРОВНЕ 
ПОТОКА 
ВЫПОЛНЕНИЯ

К
ЛАСС 
T
IMING
 
Для загруженной на выполнение программы операционная система вы-
деляет необходимые ресурсы (защищенную от доступа других процессов 
область оперативной памяти), создавая так называемый процесс. К числу 
этих ресурсов относится защищенная от других процессов область оператив-
ной памяти, средства работы с файлами, часть процессорного времени. Для 
доступа к центральному процессору внутри процесса создается один или не-
сколько потоков управления. В пределах каждого потока управления выпол-
няется некоторый программный код. Центральный процессор по определен-
ному алгоритму переключается между разными потоками выполнения, ими-
тируя одновременный характер выполнения разных частей программы. Кро-
ме того, часть потоков могут выполнять те или иные служебные действия
предписанные операционной системой.
Одним из наиболее известных действий такого рода является сбор му-
сора (garbаge collection). Так называется процесс удаления из динамической 
памяти ставших ненужными объектов. Этот процесс время от времени ини-
циируется операционной системой и может прервать выполнение интере-
сующей нас программы. Тогда значение измеренного времени выполнения 
окажется завышенным. Решение проблемы заключается в том, чтобы выпол-
нить сбор мусора непосредственно перед началом измерения. Среда .Net 
Framework
предоставляет специальный объект GC, с помощью которого 
можно обратиться к методам управления процессом сбора мусора. Так, ини-
циировать процесс можно, обратившись к методу Collect(). Надо еще 
учесть, что удаление объекта может сопровождаться выполнением так назы-
ваемого финализатора – метода, содержащего необходимые завершающие 
действия, например, закрытие файлов, с которыми работал удаляемый 
10 / 23


11 
объект. Метод WaitForPendingFinalizers() приостанавливает выпол-
нение всех потоков до завершения работы финализаторов удаляемых объек-
тов.
Вернемся теперь непосредственно к проблеме измерения времени вы-
полнения алгоритма. Реализующий его программный код выполняется одним 
из потоков управления в рамках процесса. Системный класс Process пре-
доставляет средства работы с процессами, в частности, средства доступ к 
потокам через индексированное свойство Threads. Обращение к i-му пото-
ку текущего (т.е. выполняющего данную программу) процесса имеет вид: 
Process.GetCurrentProcess.Threads
[i]. Наконец, текущее время 
(как объект класса TimeSpan) в рамках конкретного потока выполнения 
можно получить, обратившись к свойству UserProcessorTime
Объединим все сказанное и создадим класс Timing, подобный классу 
Stopwatch
, но с методами, более точно измеряющими время выполнения 
программного кода. Этот класс представлен в листинге 1.3. 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   4   5   6   7   8   9   10   11   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling