![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| math_beginer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 29.5.2003 Репутация: нет Всего: 1 |
Есть класс - дерево. Конструктор класса, собственно, рекурсивно строит это дерево. Одним из параметров этого конструктора является двумерный массив. На больших массивах класс стал медленно работать (понятное дело, рекурсия). Решил передавать массив по ссылке. Но тогда, если передаем массив по ссылке в другие методы класса (вывод на экран, например) то работает еще медленнее, а когда передаем в конструктор, так сервак вообще вешается и пишет что-нибудь вроде: Maximum execution time of 30 seconds exceeded in C:\html\class\included_tree.php on line 26
Ведь по идее, если передаем по ссылке, то передается не копия массива, а ссылка на массив (я представляю себе это приблизительно как передачу указателя в C/C++), и следовательно, не выделяется дополнительная память под массив и должно работать быстрее. А в итоге получается, что либо работает еще медленнее, либо совсем не работает???! --------------------
Метод "Кнута и Пряника" - алгоритм, описанный в известной монографии Кнута и позднее модифицированный русским программистом Пряником. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
А вообще что за дерево этот класс строит? Откуда берет нфу для постройки? А то может возможно сделать все немного проще. PS Если после set_time_limit будет выскакивать ошибка PHP Has stack overflow, ищи замену рекурсии циклом. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| math_beginer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 29.5.2003 Репутация: нет Всего: 1 |
Теперь я вообще ничего не понимаю. Поставил set_time_limit(0). Теперь ошибок не выдается, но дерево строилось минут пять. (Если передавать массив как обычно - "по значению", то строится где-то секунды 2-3)
Массив для построения дерева берем из БД, потом передаем его в конструктор. Сейчас чуть больше 1000 элементов и 4 уровня вложенности, но в принципе число элементов и уровней вложенности может увеличиться, поэтому сомневаюсь что можно заменить циклом. В массиве - id элемента, id родителя, имя, и еще несколько несущественных хар-тик. Вот я и надеялся: зачем так много раз копировать один и тот же массив, будем передавать его по ссылке... --------------------
Метод "Кнута и Пряника" - алгоритм, описанный в известной монографии Кнута и позднее модифицированный русским программистом Пряником. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |