On initial inspection, I strongly suspect that the problem you describe with larger input file is because of your profligate use of memory pushing your process into swapping and thus slowing it down by a factor of 1,000 times or more.
An example. In this loop:
foreach my $len(@uniques) { push @distrbtn, $len; my $index = 0; my $count = 0; while( $index <= $#sorted ) { if( $len == $sorted[$index] ) { $count++; } $index++; } push @distrbtn, $count; }
You build an array by alternately pushing the length; and then the count of sequences of that length.
And then as soon as the loop finishes you convert that array into a hash:
my %dstrbtn_hash = @distrbtn;
And (AFAI saw), the array is never referenced again, but sticks around using memory for the rest of the script.
Why build the array only to convert it into a hash? Why not just do:
my %dstrbtn_hash; foreach my $len(@uniques) { my $index = 0; my $count = 0; while( $index <= $#sorted ) { if( $len == $sorted[$index] ) { $count++; } $index++; } $dstrbtn_hash{ $len } = $count; }
In reply to Re: Speeding up stalled script
by BrowserUk
in thread Speeding up stalled script
by onlyIDleft
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |