我目前正在运行一个 perl 程序,我必须在其中获取一个 100 万行的文本文件,将其分解为多个块(每个块在 50 到 50,000 行之间),然后对其进行一些计算等。现在,我将所有数据加载到 array1 中。我使用 array2 并使用它来提取我需要的数据块。然后我在阵列 2 上执行我需要执行的操作,然后返回并获取下一组。
示例数据
A,等等,等等
A,等等6,等等7
A,等等4,等等5
乙,废话2,废话2
所以我会把前三个放到数组 2 中,对它们进行排序,然后继续下一组。我的程序开始时运行良好且高效,但之后会出现严重的减速。
50K 需要 50 秒,100k 需要 184 秒,150k 需要 360 秒,200k 需要 581 秒,并且随着程序的继续,它只会呈指数级恶化(500k 行的 4500 秒)
不,我不能为这个项目使用数据库,有什么建议吗?
my @Rows1=<FILE>;
my $temp = @Rows1;
for($k = 0; $k < $temp; $k++)
{
my @temp2array = ();
my $temp2count = 0;
my $thisrow = $Rows1[$k];
my @thisarray = split(',', $thisrow);
my $currcode = $thisarray[0];
my $flag123 = 0;
$temp2array[$temp2count] = $thisrow;
$temp2count++;
while ($flag123 == 0)
{
$nextrow = $tuRows1[$k + 1];
@nextarray = split(',', $nextrow);
if ($currcode eq $nextarray[0])
{
$temp2array[$temp2count] = $nextrow;
$k++;
$temp2count++;
}
else
{
$flag123 = 1;
}
}
}
我已经将我的代码编辑为更类似于下面的答案,并且我有这些时间:
50k = 42, 100k = 133, 150k = 280, 200k = 467, 250k = 699, 300k = 978, 350k = 1313
它并不完全保持线性,按照这种趋势,这个 prog 仍然需要 14000 多秒。我将调查代码的其他部分