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
Форумы портала PHP.SU :: Версия для печати :: Можно ли начать читать папку сразу с i-го файла? [2]
Форумы портала PHP.SU » » Вопросы новичков » Можно ли начать читать папку сразу с i-го файла?

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

16. LIME - 31 Июля, 2017 - 20:11:09 - перейти к сообщению
Ch_chov пишет:
Они для разных задач, их нельзя сравнивать.
почему? очень даже можно
рекурсия всегда будет помедленнее и поболее жрать памяти из-за накладных расходов вызова (выделение памяти в области данных и их передача при вызове и возврат результата и освобождение памяти обратно)
тем более есть еще и такие "правильные" рекурсии что ого... классический пример рекурсия для чисел Фибоначчи без запоминания результата
в общем случае можно считать что рекурсия удачна если на следующий вызов входные данные уменьшаются примерно в столько раз сколько вызовов рекурсии происходит в текущем вызове
в случае если в следующий уровень вызова передаются данные уже вычисленные ранее то помогает запоминание результата и этот признак не работает
Однако рекурсии очень полезны в случае не сильно большой глубины вложенности и меньшей написательной сложности алгоритма, и так как вычислительная сложность наверняка будет выше. То есть когда не особо важно что медленнее зато гораздо понятнее
17. Строитель - 31 Июля, 2017 - 20:43:42 - перейти к сообщению
LIME, спасибо )
18. borus - 01 Августа, 2017 - 13:24:59 - перейти к сообщению
Мелкий пишет:
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, правильно понял?
19. Мелкий - 01 Августа, 2017 - 13:39:40 - перейти к сообщению
bash как он есть. Можно скриптом на php изобразить то же самое, но текста будет больше. А так в одну строку создали 60тыс файлов (при том что я не догадался до варианта, показанного Ch_chov с touch, что ещё компактнее), потом одной строкой померили производительность scandir'а (включая все затраты на запуск самого php, кстати)

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

 

Powered by ExBB FM 1.0 RC1