perl readdir () в сетевом каталоге - скалярный контекст списка и производительность сети - PullRequest
1 голос
/ 17 января 2011

У нас есть общий сетевой ресурс с большим количеством файлов, и мы собираемся перебрать все файлы с помощью perl readdir ().Что более эффективно при сетевой связи (или они одинаковые)?1) readdir в контексте списка?2) readdir в скалярном контексте?

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

Спасибо!-Питер

1 Ответ

3 голосов
/ 17 января 2011

Ниже приведен код для сравнения:

use Benchmark;

my $dir_name = 'a network path';
timethese(-2, {
    scalar => sub {
        opendir(my $dir, $dir_name);
        while(my $entry = readdir($dir)) {
        }
    },
    list => sub {
        opendir(my $dir, $dir_name);
        my @entries = readdir($dir);
    },
});

Результаты были довольно похожи на моей машине / сети (WinXP и удаленный ресурс), однако немного в пользу scalar версии.

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