какой код быстрее?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

какой код быстрее?

Сообщение timsoft » 04.10.2004 (Пн) 12:50

Как по вашему, что выполниться быстрее?

Код: Выделить всё
a="Вася"
if b then a="Петя"


или

Код: Выделить всё
if b then
  a="Петя"
else
  a = "Вася"
endif


или

Код: Выделить всё
a=IIf(b,"Петя","Вася")

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 04.10.2004 (Пн) 12:56

Второй
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 04.10.2004 (Пн) 13:44

Dim s(255) As String
s(0) = "Петя"
s(255) = "Вася"
...
a = s(CByte(b))
при запуске без компиляции это ещё быстрее, но в exe второй способ оказывается быстрее.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.10.2004 (Пн) 14:29

Быстрее a = ..., но надо вначале выполнить s(0) = ..., а это не быстрее.
Lasciate ogni speranza, voi ch'entrate.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 04.10.2004 (Пн) 14:37

Вот моя мысля:
3-й – почти в 4 раза медленнее второго
А вот скорость выполнения первого зависит от значения b, если условие истинно, то код выполняется в ~ 1.4 раза медленнее чем когда условие ложно! Ежели условие ложно то по скорости 1-й приблизительно равен второму.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Сообщение timsoft » 04.10.2004 (Пн) 15:05

Спасибо всем!

будем перелопачивать код :)

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 04.10.2004 (Пн) 17:28

И много кода? ;) Из-за такой мелочи.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Сообщение timsoft » 04.10.2004 (Пн) 18:18

gaidar писал(а):И много кода? ;) Из-за такой мелочи.


да есть парочка серьезных циклов, где эта фигня может притормаживать
хотя я проверил на for i=0 to 1000000
не сильно влияет

в общем, что-то в консерватории менять надо, но видимо не это :-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.10.2004 (Пн) 18:20

Менять, всё менять...
Вот, например, г-н Кармак - известный перфекционист и сторонник чистки кода. См. движки от id :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 05.10.2004 (Вт) 16:49

По моей логике второй
Код: Выделить всё
if b then
  a="Петя"
else
  a = "Вася"
endif


в первом может выполнится лишний раз оператор присвоения, а в третьем тратится время на вызов функции и ее выполнение

Делай так, еще быстрее будет выполнятся в цикле:

Код: Выделить всё
'Описание
Dim b As Boolean
Dim Name1(-1 To 0) As String
Dim a As String

Name1(-1) = "Петя"
Name1(0) = "Вася"


'а это ставь в цикл
a = Name1(b)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 0

    TopList