質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3312閲覧

unset()のタイミング

imamoto_browser

総合スコア1161

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/06/01 08:13

以下のようにwhile文で値を取得して、whileループ終了後にunsetしているのですが、$listに値を格納後に,whileループの中で各々の変数を毎回unsetする方がメモリ効率はいいような気がします。

厳密にどちらの方が速いでしょうか。それを数値化して速度をだせるツールはありますか。

■fetch.php

lang

1while($row = $sql->fetch()) { 2 $id = $row['SID']; 3 $id = intval($id); 4 $lastname = $row['Last_Name']; 5 $firstname = $row['First_Name']; 6 $tele = $row['Telephone']; 7 $job = $row['Job']; 8 if(isset($row['type'])){ 9 $type = $row['type']; 10 if(is_null($type)) $type= '-'; 11 } 12 if(isset($row['type'])){ 13 $list = array('ID'=>$id, 'LASTNAME'=>$lastname, 'FNAME'=>$firstname, 'TELE'=>$tele, 'JOB'=>$job, 'TYPE'=>$type); 14 }else{ 15 $list[] = array('ID'=>$id, 'LASTNAME'=>$lastname, 'FNAME'=>$firstname, 'TELE'=>$tele, 'JOB'=>$job, 'TYPE'=>'-'); 16 17 } 18 } 19 $this->list = $list; 20 unset($list); 21 return $this->list;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHPでは「Copy on Write」といって、変数をコピーした場合にもその場でコピーが行われるのではなく、とりあえずは同じオブジェクトを指すままにしておいて、どっちかを変更しようとした瞬間にコピーする(変更が入らないままならコピーもしない)というような最適化が行われています(PHP 7では、intやfloatなど細かいオブジェクトについてはバイパスするようになりますが)。

そんなわけで、$listへ値を詰め込んだ時にも、実はコピーなどされていないので、元の変数をunset()したところで解放されるメモリはほぼありませんし、zvalもどうせ次のループで置き換わるのですから過剰なコードにしかならないでしょう(そういう意味で、最後の行のunset($list);もまり意味を持ちません)。

ちょうどPHPのサイトに、GCの動きを確認するようなサンプルがありますので、試してみるといいかもしれません。

投稿2015/06/01 08:34

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問