Zend_Memory
コンポーネントは、
限られたメモリ環境でデータを管理するためのものです。
メモリマネージャが要求に応じて メモリオブジェクト (メモリコンテナ) を作成し、必要に応じて透過的にスワップ/読み込みを行います。
たとえば、あるオブジェクトを作成あるいは読み込むことによって メモリの使用量が制限値を超えてしまう場合に、 管理しているオブジェクトのいくつかをメモリの外部の キャッシュにコピーします。 このようにして、管理しているオブジェクトのメモリ使用量が 制限値を超えないようにします。
メモリマネージャの保存機能は、 Zend_Cache バックエンド を使用しています。
例603 Zend_Memory コンポーネントの使用法
Zend_Memory::factory()
は、
指定したバックエンドオプションでメモリマネージャオブジェクトの
インスタンスを作成します。
$backendOptions = array( 'cache_dir' => './tmp/' // スワップしたメモリブロックを配置するディレクトリ ); $memoryManager = Zend_Memory::factory('File', $backendOptions); $loadedFiles = array(); for ($count = 0; $count < 10000; $count++) { $f = fopen($fileNames[$count], 'rb'); $data = fread($f, filesize($fileNames[$count])); $fclose($f); $loadedFiles[] = $memoryManager->create($data); } echo $loadedFiles[$index1]->value; $loadedFiles[$index2]->value = $newValue; $loadedFiles[$index3]->value[$charIndex] = '_';
Zend_Memory
コンポーネントは、以下の概念で構成されています。
-
メモリマネージャ
-
メモリコンテナ
-
ロックされたメモリオブジェクト
-
移動可能なメモリオブジェクト
メモリマネージャは、アプリケーションからの要求に応じて (ロックされた、あるいは移動可能な) メモリオブジェクトを作成し、 それをメモリコンテナオブジェクトにラッピングしたものを返します。
メモリコンテナは、文字列型の属性 value を (仮想的に、あるいは実際に) 保持します。 この属性には、メモリオブジェクトの作成時に指定された値が含まれます。
この属性 value は、オブジェクトのプロパティとして扱うことができます。
$memObject = $memoryManager->create($data); echo $memObject->value; $memObject->value = $newValue; $memObject->value[$index] = '_'; echo ord($memObject->value[$index1]); $memObject->value = substr($memObject->value, $start, $length);
注記
5.2 より前のバージョンの PHP を使用している場合は、 value プロパティに直接アクセスするのではなく getRef() メソッドを使用します。
移動可能なメモリオブジェクトは、
必要に応じて Zend_Memory
がキャッシュにスワップしたり
キャッシュから読み戻したりします。この処理は透過的に行われます。
メモリマネージャは、指定した最小値より小さいサイズのオブジェクトはスワップしません。 これは、パフォーマンスを考慮した判断です。詳細は このセクション を参照してください。