Edited at

[PHP]unset構文と処理速度

More than 3 years have passed since last update.

unset関数を使うと処理速度はどうなるのか、という話。

while文の最後にunset関数を使っています。

結論

「while文中では、最後に変数を破棄したほうが処理が早くなるのかも」

2つ目のコードの方が30ms(0.03秒)早いです。

追記

ご指摘いただいた風に、コードを修正したところ、実行速度が50ms早くなりました。

unset構文に関しては、スコープを把握しないで乱用すると大変なことになりそうです。複数の引数に対応しているようなので、1行にまとめました。


これでも問題なく動く

<?PHP

$content = fopen($argv[1], "r");

while (($line = fgets($content)) !== false) {
$ary = preg_split("/[\s]/", $line);
$str = $ary[1];

$pattern = preg_split("/[\\+\-]/", $ary[1]);

foreach (str_split($pattern[0]) as $val) {
$left[] = $val;
}
foreach (str_split($pattern[1]) as $val) {
$right[] = $val;
}
$leftnumber = substr($ary[0], 0, count($left));
$rightnumber = substr($ary[0], count($left));

if (strstr($ary[1], "+")) {
echo $leftnumber + $rightnumber . PHP_EOL;
} elseif (strstr($ary[1], "-")) {
echo $leftnumber - $rightnumber . PHP_EOL;
}

unset($left, $right);
}

fclose($content);



だけどこっちの方が処理は早い

<?PHP

$content = fopen($argv[1], "r");

while (($line = fgets($content)) !== false) {
$ary = preg_split("/[\s]/", $line);
$str = $ary[1];

$pattern = preg_split("/[\\+\-]/", $ary[1]);

foreach (str_split($pattern[0]) as $val) {
$left[] = $val;
}
foreach (str_split($pattern[1]) as $val) {
$right[] = $val;
}
$leftnumber = substr($ary[0], 0, count($left));
$rightnumber = substr($ary[0], count($left));

if (strstr($ary[1], "+")) {
echo $leftnumber + $rightnumber . PHP_EOL;
} elseif (strstr($ary[1], "-")) {
echo $leftnumber - $rightnumber . PHP_EOL;
}

unset($left, $right, $rightnumber, $leftnumber);
}

fclose($content);


処理速度を気にするならPHPじゃなくて(ry

って話になりそうですね。