Perl: снижение производительности при чтении нескольких файлов - PullRequest
0 голосов
/ 20 мая 2011

Мне было интересно, что лучше в этом случае?

Я должен прочитать тысячи файлов.Я думал об открытии в каждом файле и читать один и закрывать его.Или скопируйте все файлы в один файл и прочитайте это.

Предложения?Это все в Perl.

Ответы [ 4 ]

6 голосов
/ 20 мая 2011

Это не должно иметь большого значения.Для меня это звучит как преждевременная оптимизация.

2 голосов
/ 20 мая 2011

Если время для cat объединения всех файлов в один больший файл не имеет значения, оно будет быстрее (только при последовательном чтении файла, что по умолчанию).

Конечно, если принять во внимание процесс, он будет намного медленнее, потому что вам придется читать, писать и читать снова.

В общем, чтение одного файла с 1000M должно быть быстрее, чем чтение 100 файлов с 10M, потому что для 100 файлов вам нужно искать метаданные.

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

1 голос
/ 20 мая 2011

Обратите внимание, что cat * может завершиться ошибкой, если количество файлов превышает значение ulimit -n. Так что последовательное чтение на самом деле может быть безопаснее. Кроме того, рассмотрите возможность использования opendir и readdir вместо glob, если все ваши файлы находятся в одном каталоге.

0 голосов
/ 20 мая 2011

Просто прочитайте файлы последовательно.Файловые функции ввода / вывода в Perl - довольно тонкие обертки для собственных вызовов файлового ввода / вывода в ОС, поэтому нет особого смысла беспокоиться о производительности из простого файлового ввода / вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...