为什么我的perl代码的执行时间变化如此之大?

Qia*_* Li 1 perl performance

我发现以下perl代码以惊人的变化速度执行,有时很快,有时很慢.我有几个包含数万个文件的文件夹,我需要运行此代码.我正在使用Windows 7在cygwin上运行它.只是想知道是否有人可以帮助我加快速度,或者至少要弄清楚速度变化的原因.在所有这些情况下,我的CPU和内存应该很丰富.

外循环迭代$ dir的列表

opendir(DIR, $dir);
@all=readdir(DIR);
@files = (0..$#all);
$i=-1;
foreach $current (@all){     
    if (-f "$dir/$current") {
        $files[++$i]=$current;
    }
}
push @Allfiles,@files[0..$i];
closedir(DIR);
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 7

您可能受I/O限制,因此对代码的更改可能不会影响总运行时间 - 运行时将受目录条目是否在缓存中的影响.

但是你的代码使用临时数组没有充分的理由,如果目录非常大,使用太多的RAM.您可以将其简化为:

opendir(DIR, $dir);
while (my file = readdir(DIR)) {
    push @Allfiles, $file if (-f "$dir/$file");
}
closedir(DIR);
Run Code Online (Sandbox Code Playgroud)

没有临时数组.