网络目录上的 perl readdir() - 标量与列表上下文和网络性能

Posted

技术标签:

【中文标题】网络目录上的 perl readdir() - 标量与列表上下文和网络性能【英文标题】:perl readdir() on network directory - scalar vs list context and network performance 【发布时间】:2011-01-17 14:56:40 【问题描述】:

我们有一个包含大量文件的网络共享,并且将通过 perl readdir() 遍历所有文件。网络通信哪个更有效(或者它们是否相同)? 1)列表上下文中的readdir? 2) 标量上下文中的 readdir?

通常我会避免使用列表上下文以避免将整个列表存储在内存中,但如果它要在列表上下文中访问共享一次并且在标量上下文中多次访问,那么我宁愿使用列表上下文。

谢谢! -彼得

【问题讨论】:

【参考方案1】:

以下是一些用于测试差异的代码:

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 版本。

【讨论】:

以上是关于网络目录上的 perl readdir() - 标量与列表上下文和网络性能的主要内容,如果未能解决你的问题,请参考以下文章

Perl 中的目录句柄无法正常工作

有没有办法通过 SSH/SFTP 进行 opendir()、readdir() 类型的调用?

如何在perl中验证具有给定文件扩展名的多个文件

linux中readdir是按照啥顺序读一个文件夹下的文件的?

C语言readdir和opendir

Node.js fs.readdir 递归目录搜索