Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
1

Подсчитать количество итераций цикла в единицу времени

07.05.2012, 09:14. Просмотров 1910. Ответов 10
Метки нет (Все метки)

Хочу подсчитать производительность проги, зациклив её на час и подсчитав количество итераций. Как это проще всего сделать? Не обязательно самый идеологически правильный и/или самый точный способ.

Хочу сравнить производительность малоизвестного BBC BASIC. Сам язык нравится больше, чем VB.NET. Но это интерпретатор, хотя и один из самых эффективных и оптимизированных. Там это делается так:

Код
Start% = time
Iterations% = 0
do
   MyPi = mypicalc
   Iterations% += 1
until (time - Start%) > 359999
print Iterations%
Хотелось бы соорудить на VB.NET что-то максимально похожее - для чистоты эксперимента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 09:14
Ответы с готовыми решениями:

Для чего верхнюю границу цикла уменьшать на единицу?
Всем привет! Довольно часто в различных примерах кода вижу такое(пример...

Как в с/с++ можно подсчитать количество символов, обработанных в единицу времени
Добрый день, у меня такой вопрос: Допустим есть функция перебирающая большой...

Задать количество итераций цикла
как сделать так чтоб цикл считал столько раз сколько я ввел? почему выводит...

Частота пропускания и количество выборок в единицу времени
Привет. Возник такой вопрос, немного запутался. Вот допустим есть осциллограф....

Не выполняется нужное количество итераций цикла
Добрый день ребята!!!! Помогите найти ошибку!!! ...

10
Памирыч
Почетный модератор
20878 / 8762 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
07.05.2012, 11:37 2
Vtulhu, может как-то так:
vb.net
1
2
3
4
5
6
7
8
        Dim Iterations As Long = 0
        Dim D As DateTime = Now
        Dim TS As TimeSpan
        Do
            Iterations += 1
            TS = Now - D
        Loop While TS.TotalMilliseconds < 359999
        MsgBox(Iterations)
Тока я не понял что за MyPi = mypicalc
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.05.2012, 13:22  [ТС] 3
Цитата Сообщение от Памирыч Посмотреть сообщение
Тока я не понял что за MyPi = mypicalc
Просто некая достаточно трудоёмкая функция. Например, вычисление числа Пи до тысячного знака.

А проблему свою я решил вот так (Дейкстра перевернулся в гробу, Кнут рвёт последние волосы на голове):

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Option Explicit On
Option Strict On
 
Imports System
 
Module Module1
 
    Sub Main()
 
        Dim iterations As Long = 0
        Dim myPi As String
 
        Dim waitHour As Integer = DateTime.Now.Hour
        waitHour += 1
        If waitHour = 24 Then waitHour = 0
        Do : Loop Until DateTime.Now.Hour = waitHour
 
        Do
            myPi = MyPiCalc(1000)
            iterations += 1
        Loop While DateTime.Now.Hour = waitHour
 
        Console.WriteLine(iterations)
 
    End Sub
 
End Module
Получается, что тест может выполняться два часа, но меня это мало волнует. Собственно, он недавно завершился (в 13:00). Выяснилось, что BBC BASIC медленнее VB.NET практически ровно в 100 раз!
0
PAnT0P
1024 / 548 / 106
Регистрация: 26.03.2012
Сообщений: 987
07.05.2012, 13:25 4
Что и следовало доказать: у интерпретатора против компилятора ни единого шанса.
0
cergew
Крутой форумчанин
148 / 148 / 8
Регистрация: 09.01.2011
Сообщений: 298
07.05.2012, 13:28 5
Цитата Сообщение от Vtulhu Посмотреть сообщение
%
Мда уж... Это просто синтаксис-мечта, ставить всякие % после имён переменных. Хотя мы это уже проходили; давно, слава богу.
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.05.2012, 14:10  [ТС] 6
Цитата Сообщение от PAnT0P Посмотреть сообщение
Что и следовало доказать: у интерпретатора против компилятора ни единого шанса.
Вы ошибаетесь. Знаете, что я понял после этого теста? Я буду пользоваться BBC BASIC. Потому что мне его скорости хватит. Какая разница, обсчитается моя формула за сотую долю секунды или за одну десятитысячную, если мне достаточно одной десятой? В современном мире важнее скорость разработки.

Цитата Сообщение от cergew Посмотреть сообщение
Мда уж... Это просто синтаксис-мечта, ставить всякие % после имён переменных. Хотя мы это уже проходили; давно, слава богу.
А мне нравится. Дисциплинирует. И не забываешь, какого типа объявленные тобой переменные. В общем, это дело вкуса и/или привычки.
0
Eugene22
_
2351 / 1224 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
07.05.2012, 14:54 7
Цитата Сообщение от Vtulhu Посмотреть сообщение
А мне нравится. Дисциплинирует. И не забываешь, какого типа объявленные тобой переменные. В общем, это дело вкуса и/или привычки.
в VB.NET есть что-то наподобие. Во-первых, можно перед именем переменной употреблять префиксы, они в сути ничего не обозначают, просто служат для идентификации переменной, чтобы потом в коде увидел и по префиксу определил, что это Double а не Single.

Во-вторых, можно использовать что-то наподобие префиксов типов данных после константы, например:
vb.net
1
Console.WriteLine("a"c)
Знак "c" после константы "a" означает, что в данном случае мы выводим символ, а не строку, как было бы, если бы не было в конце символа "c". Подобные символы есть и для других типов данных.

А вообще подобные подсчеты довольно примерны и зависят от кучи разных условий. Я как-то замерял одну программу и время ее выполнения варьировалось от 30 до 55 секунд. Так что подсчеты все будут только примерными. А то начнется замер, и тут в фоновом режиме начнется обновляться антивирус, флеш-плейер и куча разной фигни.
0
PAnT0P
1024 / 548 / 106
Регистрация: 26.03.2012
Сообщений: 987
07.05.2012, 16:22 8
Цитата Сообщение от Vtulhu Посмотреть сообщение
Вы ошибаетесь. Знаете, что я понял после этого теста? Я буду пользоваться BBC BASIC. Потому что мне его скорости хватит. Какая разница, обсчитается моя формула за сотую долю секунды или за одну десятитысячную, если мне достаточно одной десятой? В современном мире важнее скорость разработки.
Вот именно из-за такого подхода программы с каждым годом становятся все жирнее и тормознутнее.
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.05.2012, 16:24  [ТС] 9
Цитата Сообщение от Eugene22 Посмотреть сообщение
А вообще подобные подсчеты довольно примерны и зависят от кучи разных условий. Я как-то замерял одну программу и время ее выполнения варьировалось от 30 до 55 секунд. Так что подсчеты все будут только примерными. А то начнется замер, и тут в фоновом режиме начнется обновляться антивирус, флеш-плейер и куча разной фигни.
Вряд ли этим можно объяснить замедление в 100 раз при тестировании в течение часа. А вб.нет меня уже много чем не устраивает. Да хотя бы тем, что после запуска Вижуал Студии винда начинает вопить про недостаток памяти и требует закрыть какое-нибудь приложение - то Файрфокс, то Боковую Панель.
0
Eugene22
_
2351 / 1224 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
07.05.2012, 16:36 10
По-моему, оба сравниваемых кода не эквивалентны, в примере с обычным бейсиком в цикле вычисляется количество итераций. пока не пройдет некоторый период времени, а в vb.net сначала запускается холостой цикл в течении часа, а потом же идет расчет итераций. Плюс реализация самих функций на обоих языках может отличаться. В силу этого, я думаю, в vb.net можно достичь большей производительности по сравнению с тем бейсиком.
Цитата Сообщение от Vtulhu Посмотреть сообщение
Да хотя бы тем, что после запуска Вижуал Студии винда начинает вопить про недостаток памяти и требует закрыть какое-нибудь приложение - то Файрфокс, то Боковую Панель.
Не знаю. у меня виста, никаких проблем даже с тормознутом дизайнером wpf особо не возникает. Просто не надо параллельно запускать десятки вкладок в браузере и открывать кучу программ, которые все равно не будут нужны
К тому же свет клином не сошелся на Visual Studio - это всего лишь среда, и для работы с VB.NET можно обойтись без нее и компилировать из командной строки, особенно если приложения консольные.
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.05.2012, 17:10  [ТС] 11
Цитата Сообщение от Eugene22 Посмотреть сообщение
По-моему, оба сравниваемых кода не эквивалентны
Спасибо, кэп!

в примере с обычным бейсиком в цикле вычисляется количество итераций. пока не пройдет некоторый период времени, а в vb.net сначала запускается холостой цикл в течении часа, а потом же идет расчет итераций.
Я хотел измерить количество итераций в течение часа. Я этого добился. Разными способами, но как раз это не принципиально. Кстати, Вы недопоняли алгоритм. Холостой цикл идёт не в течение часа. Он идёт до следующей границы часа. Например, до 12:00. А собственно тест идёт, пока не наступит 13:00.

Плюс реализация самих функций на обоих языках может отличаться. В силу этого, я думаю, в vb.net можно достичь большей производительности по сравнению с тем бейсиком.
Реализация написана мной, так что это мои проблемы. А зачем мне бОльшая производительность? Чтобы BBC BASIC оказался не в 100, а в 1000 раз медленнее? Но меня по-любому устраивает его производительность. В принципе, именно для выяснения этого я и делал эти измерения. Сравнение с VB.NET, по большому счёту, сделал просто из любопытства. Хотя такой разницы я, признаюсь, не ожидал.

К тому же свет клином не сошелся на Visual Studio - это всего лишь среда, и для работы с VB.NET можно обойтись без нее и компилировать из командной строки, особенно если приложения консольные.
Раньше мне нравился VB.NET, но сейчас я в нём разочаровался. Единственное его преимущество (для меня!) перед BBC - это Visual Studio. Ну и производительность, но в BBC BASIC можно делать ассемблерные вставки, так что это не принципиально. Таким образом, я получаю удобства интерпретируемого языка и скорость ассемблерного кода. На всякий случай поясню, что я не навязываю Вам BBC BASIC, просто он идеально подошёл лично мне. Говорят же, что любят вопреки.
0
07.05.2012, 17:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 17:10

Как посчитать количество итераций цикла?
Не совсем представляю, как это осуществить. Т.е. возвращается х, а еще что-то...

Функция которая возвращает количество итераций цикла
Написать функцию, которая для заданного в качестве параметра числа возвращает...

Количество итераций цикла с одинаковым значением кратного
Здраствуйте. Подскажите пожалуйста как подсчитать количество итераций с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru