Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Измерение скорости исполнения кода


Автор: Eatmeat 4.12.2006, 22:00
Собственно, чем лучше измерять скорость исполнения кода?

Автор: Naum 5.12.2006, 10:02
Самый простой способ, который я знаю: Вставляешь перед кодом, скорость выполнения которого надо измерить, что-нибудь типа:
DateTime tn=DateTime.Now;
а после
tn=DateTime.Now.Subtract(tn);
и выводишь куда-нибудь эту самую tn.

Автор: DarkDragon 5.12.2006, 13:21
Цитата(Naum @  5.12.2006,  10:02 Найти цитируемый пост)
tn=DateTime.Now.Subtract(tn);

Вроде возвращает TimeSpan структуру, а не класс DateTime.

Код

Dim tp As TimeSpan
'...
'....
'....
tp = DateTime.Now.Subtract(tn)


И еще Naum, код C# в VB.NET smile

Цитата(Naum @  5.12.2006,  10:02 Найти цитируемый пост)
и выводишь куда-нибудь эту самую tn. 

Если Windows приложение, тогда Debug:
Debug.WriteLine (tp.Seconds)

Если Console приложение, тогда Console:
Console.WriteLine (tp.Ticks)

Автор: Naum 5.12.2006, 13:34
 smile 
Цитата(DarkDragon @  5.12.2006,  14:21 Найти цитируемый пост)
И еще Naum, код C# в VB.NET 

Блин, запутался совсем. Вообще-то я VB-шник, но все пытаюсь перейти на C#, потому что на работе недовольны.

Автор: popzow 5.12.2006, 14:18
Часто необходимо измерить время выполнения куска кода. Как это сделать? В .NET это делатется с помощью классов DateTime и TimeSpan.
Dim datebefore As Date 'Здесь хранится время запуска кода
Dim dateafter As Date 'Здесь время окончания кода
Dim tspan As New TimeSpan 'Это для вычисления разницы между dateafter и datebefore

'Засекаем время
datebefore = Now

'---здесь располагается код---

'Смотрим время
dateafter = Now
tspan = dateafter.Subtract(datebefore)
MsgBox("Время выполнения: " & tspan.TotalMilliseconds.ToString)

Автор: ivashkanet 5.12.2006, 15:07
 smile Ребята. Хватит давать одно и то же решение, но в разных видах. Аля кто круче всех напишет smile 

Автор: Дрон 5.12.2006, 15:33
Цитата(Eatmeat @  4.12.2006,  22:00 Найти цитируемый пост)
Собственно, чем лучше измерять скорость исполнения кода? 


Тут вот привели решения, основанные на разности времени окончания и начала работы. На самом деле это не совсем корректно.
Дело в том, что это время может сильно варьироваться, например, в зависимости от загруженности процессора другими задачами.
Кроме того, DateTime имеет не слишком большую точность -- порядка 15 мс. 

Первое можно учесть, используя вместо DateTime.Now.Ticks выражение System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime.Ticks. Тогда мы узнаем то время, которое потрачено процессором именно на выполнение нашей задачи. Только точность там всё-равно ~15 мс.

Если же нужно замерить длительность совсем короткую операции и нужна высокая точность (правда без учёта выполнения параллельных задач), то используйте класс System.Diagnostics.Stopwatch.





Автор: Naum 5.12.2006, 15:52
Если уж речь зашла о времени процессора, mr.Duda недавно постил интересную http://www.dtf.ru/articles/read.php?id=39888.

Добавлено @ 15:53 
Правда, к .NET не имеет никакого отношения. Но все равно интересно почитать.

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