С удовольствием! Сам давно многих уговариваю провести тест, но никто, что-то не торопится.
Вот мой код:
dim i as long,Max as long
dim t1 as single,t2 as single
t1 = timer
Max=2*10^6
do while i<max
i=i+1
loop
t2=timer
msgbox "Досчитал до ста!!! За"+str$(t2-t1)+" сек."
Этот кусок на моём компе (2400/533) в VB 6.0 делается где-то за секунду.
На быстрых языках Borland C++ Builder (не помню какой), VC++ 6.0 цифра Max маловата для оценки. Но, в общем, они досчитали за ту же секунду до 2 миллиардов (для особо одарённых 2*10^9)!!!
Ну так вот хотелось бы, чтобы кто-нибудь провёл сравнительный анализ на всех трёх языках и рассказал нам о результатах.
P.S. Конечно, такой код не может отвечать за все виды операций. Какой-то язык может быть лучше в одних областях и хуже в других. Но!!! VB 6.0 когда родился-то? Я сам не знаю, но, наверное, давно. А VB.Net - недавно. Т.е. VB.Net должен "делать" шоху на всех фронтах. На таком простом тем более...
А вообще, это все неправильно. При тестировании не учитывается работа других приложений Windows, загрузка кэша и другие нюансы, из-зи которых система работает медленнее. попробуйте, перезагрузиться, потом запустить тест. Посмотрите результат. потом еще раз, и еще... Работает все медленнее, так ведь?
PbAsm работает с одной переменной в памяти. По этому скорость получается ниже чем пустой цикл, который работает похоже только с регистрами. А алгоритм PBASM похож на алгоритм Do While. Алгоритм Do While на PB нужно будет ещё пересмотреть. Может я где ошибся.
PbAsm за 2,9375 Do While за 107,6562 For за 1,71875
.NET меня поразил и в этот раз! Ваш код отработал за 0 секунд!
Вот код:
Module Module1
Sub Main()
Dim i As Int32
Dim Max As Int32
Dim t1 As Single
Dim t2 As Single
t1 = Timer
Max = 2 * 10 ^ 8
Do While i < Max
i = i + 1
Loop
t2 = Timer
Console.WriteLine("Досчитал до ста!!! За" + Str$(t2 - t1) + " сек.")
Console.ReadLine()
End Sub
End Module
У меня P4 - 2.66 GHz, 256 оперативы, Win XP Pro, причём ещё 38
процессов портят воздух...
Скомпиленую прогу можно здесь скачать:
http://vbnet.ru/testdotnet.zip
Если поставить Max = 2 * 10 ^ 8, то за секунду отрабатывает.
Почему For работает быстрее мне вроде как понятно. Ведь While каждый раз сравнивает своё условие (по крайней мере в VB 6.0), а For один раз смотрит на условие, а потом уже просто выполняет столько раз сколько было задумано.
Но VB.Net меня, что-то не поразил. Я слышал, что он быстрее С++. А у меня, как я уже говорил за секунду до 2*10^9(!!!) Это на моём-то 2400 на 533 частоте! У Павла-то наверняка его 2.66 прёт на 800. Т.е. проц гораздо быстрее моего, а результаты хуже, чем на С++. Обидна! Единственным утешением (хотя и не маленьким - чего уж там) остаётся то, что в VB.Net, как я понимаю работа со стороками поддерживается на должном уровне.
Девятикилограммовый экзешник CyRax'а у меня отработал за 3,8.