Что именно вы имеете в виду, когда говорите, что readdir
занимает минуты и 80 МБ? Можете ли вы показать эту конкретную строку кода? Вы используете readdir
в скалярном или списочном контексте?
Вы делаете что-то вроде этого:
foreach my $file ( readdir($dir) ) {
#do stuff here
}
Если это так, вы читаете весь список каталогов в память. Не удивительно, что это занимает много времени и много памяти.
В остальной части этого поста предполагается, что это проблема, если вы не используете readdir
в контексте списка, игнорируйте остальную часть поста.
Исправление для этого - использовать цикл while и использовать readdir
в скалярном контексте.
while (
defined( my $file = readdir $dir )
) {
# do stuff.
}
Теперь вы читаете только один элемент за раз. Вы также можете добавить счетчик, чтобы отслеживать, сколько файлов вы обрабатываете.