LoginSignup
7
7

More than 5 years have passed since last update.

[PHP]unset構文と処理速度

Last updated at Posted at 2014-05-06

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
って話になりそうですね。

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7