Информация

Обсуждало 4 человека

Как быстрее?

Логика и программирование
04 апреля 2013 в 12:08:49

так
for (var a:int = inx * 6; a < num; a++ ) {
listPrV[i].push(tmpVertex[(a > 8)?a - 8:(a < 0)?8 - a:a]);
}
или так:
for (var a:int = inx * 6; a < num; a++ ) {
listPrV[i].push(tmpVertex[incr(a)]);
}
private function incr(value:int):int {
if (value > 7) return value - 8;
else if (value < 0) return 8 - value;
else return value;
}

Поидеи функции циклы это переходы, а они много времени процессора отнимают.

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

05 апреля 2013 в 19:04:53

Вот именно, в реальном времени скорость каждого выполнения цикла еще важнее, я в реальном времени обрабатывал изображение 320х240 и сократил алгоритм до одной строчки и получил прирост скорости в 4 раза

05 апреля 2013 в 18:56:24

Maldan я ж говорю про реальное время(причем ни мение 40 фпс в секунду), когда у тебя почти неограниченный запас времени тут на порядок все проще ))

05 апреля 2013 в 17:19:51

sw_alex это привычка такая ))

05 апреля 2013 в 11:35:58

sw_alex, даже я понял :D

05 апреля 2013 в 11:31:48

Первый полюбому быстрее, как уже сказали. Лишний вызов функции тебе ну никак ускорения не придаст.
А ещё использовать else if после return нет смысла в этом случае. Можно просто if

04 апреля 2013 в 18:02:51

Миллион жестоко? Я кодировал битмапку в jpeg размером 2048х1536, этот цикл выполнялся 3145728 раз, и на все уходило 12 секунд, там каждая убранная команда давала прирост в скорости и я добился 8 секунд. В общем вызов функции занимает время поэтому условие быстрее

04 апреля 2013 в 16:03:39

Даж иногда лишнии вершины пихаю в видуху, что-бы лишний раз проц не беспокоить, посмотрю как себя такой подход покажет ))

04 апреля 2013 в 16:02:04

Maldan да для флеша миллионый цикл это жестко, я даж всего 5ю побайтовыми смещениями обходился брал с битмап дата данные обрабатывал их смещениями засовывал обратно и как то процессор не шустро работал )) Вот сейчас даже для 3д движка я при инициализации пытаюсь выполнить все сложные расчеты запихать в оперативку это все, что бы когда нужно было вытаскивать от туда, а не расчитывать заного.

04 апреля 2013 в 15:57:08

Dracyla хм интересный подход, а разве деление по модулю не сложнее разности + условие?

04 апреля 2013 в 15:03:13

Быстрее первый вариант, когда работаешь с циклом, особенно когда он выполняется очень много, то нужно максимально уменьшить количество выполняемых команд, в данном случае намного быстрее выполнится условие чем функция, так как тратится время на вызов и возвращение значения, оно конечно ничтожно если выполнять цикл в небольших числах, а когда цикл выполняется миллион раз, то разница очень ощутима

04 апреля 2013 в 14:51:23

в любом случае нужно просто провести эксперимент и засечь время работы скрипта XDD..

04 апреля 2013 в 14:49:17

может вообще вот это:
(a > 8)?a - 8:(a < 0)?8 - a:a


заменить на:
((a < 0) ? -a : a) % 8

04 апреля 2013 в 14:31:13

1 вариант, потому что там нет условных операторов, которые слабо влияют на ЦП, но всё же.
А ещё он не индусский
Fundux.ru v.3.0 © 2006-2021 AleXNoD
Портал русских флеш игр и flash мультов