我发现以下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)
您可能受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)
没有临时数组.