I have been attempting to do some optimization which involved array assignment and iteration. While doing so I found something that confused me but was ultimately unrelated to my production code, as it only occurs when I print some debug.
I have boiled down a loss of almost an order of magnitude to the below test case. I have removed all the test code save for copying an array into another array from my for loop.
I have commented out three different lines of code which I tested one at a time and got a time interval value for. Running with the #<nothing> line, i.e., with no extra line, I see similar performance to the line say @array. What has me confused is the performance I get after printing an interpolated copy of the array with the line say "@array".
If anyone can enlighten me, even if I am missing something elementary, it would be greatly appreciated.
use Time::HiRes qw(gettimeofday tv_interval); my @array = (1..100); # say "@array"; # 0.332776 s # say @array; # 0.052496 s # #<nothing> # 0.052361 s my $t0 = [gettimeofday]; for (1..10000) { my @array2 = @array; } say tv_interval($t0);
In reply to Strange performance loss after interpolating an array and then copying to another array; by Kc12349
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |