PHPのコピーオンライトについて Part4

最終更新: 2019年4月10日


今回は『PHPのコピーオンライトについて』のPart4になります。

================ <COWの罠②> COWは「プログラマーがメモリ管理を意識せずともメモリの節約が行われている」という素敵な仕組みです。 しかし、COWは気を付けないと「処理速度を遅くしている可能性がある」のです。

例えば、以下のサンプルだと処理速度が遅くなっています。

——– 【サンプル:コード】 $dataList = array( ‘test1’, ‘test2’, // 略 ); $dataListTmp = $dataList; foreach ($dataListTmp as $key => $val) { // 略 } unset($dataList); unset($dataListTmp);

// 略 ——–

何故、処理速度が遅くなるのかわかりますか?

・・・・・・excatly!!(←エイゴヤメロ)

10行目のunsetにより『コピー先($dataListTmp)より先にコピー元($dataList)が破棄されていることで、COWが行われてしまっている分だけ遅くなっている』のです。 破棄の際にCOWが行われないと、$dataListTmpが参照しているものが不明になるため、COWが行われるのは当然ですね。

コピー元の『データ量が大きい』『配列構造が複雑』場合は、その分だけ処理速度が遅くなるため、注意が必要になります。 変数で扱うデータが小さい・単純ではない場合、変更する前には「”変数の代入箇所~変更する直前”までの処理を見直す」ようにしましょう。

================

以上、『Part4:COWの罠』でした。 Part5へ続きます。

  • Grey Facebook Icon
  • Grey Twitter Icon
​株式会社エイト/東京都渋谷区 /  福岡

© 2018 Eight inc.