Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно ли начать читать папку сразу с i-го файла? [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
LIME
Отправлено: 31 Июля, 2017 - 20:11:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Ch_chov пишет:
Они для разных задач, их нельзя сравнивать.
почему? очень даже можно
рекурсия всегда будет помедленнее и поболее жрать памяти из-за накладных расходов вызова (выделение памяти в области данных и их передача при вызове и возврат результата и освобождение памяти обратно)
тем более есть еще и такие "правильные" рекурсии что ого... классический пример рекурсия для чисел Фибоначчи без запоминания результата
в общем случае можно считать что рекурсия удачна если на следующий вызов входные данные уменьшаются примерно в столько раз сколько вызовов рекурсии происходит в текущем вызове
в случае если в следующий уровень вызова передаются данные уже вычисленные ранее то помогает запоминание результата и этот признак не работает
Однако рекурсии очень полезны в случае не сильно большой глубины вложенности и меньшей написательной сложности алгоритма, и так как вычислительная сложность наверняка будет выше. То есть когда не особо важно что медленнее зато гораздо понятнее
 
 Top
Строитель Модератор
Отправлено: 31 Июля, 2017 - 20:43:42
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




LIME, спасибо )
 
 Top
borus
Отправлено: 01 Августа, 2017 - 13:24:59
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Мелкий пишет:
CODE (bash):
скопировать код в буфер обмена
  1. melkij@melkij:~/tmp/manyfilesdir$ for ((i=1; i<=60000; i++)) ; do echo $i > $i ; done
  2. melkij@melkij:~/tmp/manyfilesdir$ time php -r 'var_dump(count(scandir("./")));'
  3. int(60002)
  4.  
  5. real    0m0.104s
  6. user    0m0.064s
  7. sys     0m0.036s
  8. melkij@melkij:~/tmp/manyfilesdir$
  9.  

30 секунд? Какие 30 секунд? Хотя бы до 0,3 секунд дойдите сначала на чтении листинга.

То есть вы предлагаете воспользоваться единожды функцией scandir, правильно понял?

(Отредактировано автором: 01 Августа, 2017 - 13:30:04)

 
 Top
Мелкий Супермодератор
Отправлено: 01 Августа, 2017 - 13:39:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




bash как он есть. Можно скриптом на php изобразить то же самое, но текста будет больше. А так в одну строку создали 60тыс файлов (при том что я не догадался до варианта, показанного Ch_chov с touch, что ещё компактнее), потом одной строкой померили производительность scandir'а (включая все затраты на запуск самого php, кстати)

readdir может быть быстрее из-за отсутствия сортировки. А может быть медленнее из-за того, что работает на уровне пользовательского кода, а не C. Можно измерить.
Но всё равно не тот порядок величин времени, за который строит переживать


-----
PostgreSQL DBA
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB