Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Измерение скорости исполнения кода 
V
    Опции темы
Eatmeat
Дата 4.12.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.3.2006
Где: г.Тюмень

Репутация: нет
Всего: 2



Собственно, чем лучше измерять скорость исполнения кода?
PM MAIL   Вверх
Naum
Дата 5.12.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



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


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
DarkDragon
Дата 5.12.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: 5
Всего: 8



Цитата(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)
PM MAIL   Вверх
Naum
Дата 5.12.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



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

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


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
popzow
Дата 5.12.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Часто необходимо измерить время выполнения куска кода. Как это сделать? В .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)

PM MAIL   Вверх
ivashkanet
Дата 5.12.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149



 smile Ребята. Хватит давать одно и то же решение, но в разных видах. Аля кто круче всех напишет smile 
PM MAIL WWW ICQ   Вверх
Дрон
Дата 5.12.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 93



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


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

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

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







--------------------
Да. Именно так.
PM   Вверх
Naum
Дата 5.12.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Если уж речь зашла о времени процессора, mr.Duda недавно постил интересную ссылку.

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

Это сообщение отредактировал(а) Naum - 5.12.2006, 15:53


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.