OverviewIntroduction
The Zend_Memory component is intended to manage data in an
environment with limited memory.
Memory objects (memory containers) are generated by memory manager
by request and transparently swapped/loaded when it's necessary.
For example, if creating or loading a managed object would cause
the total memory usage to exceed the limit you specify, some
managed objects are copied to cache storage outside of memory.
In this way, the total memory used by managed objects does not
exceed the limit you need to enforce.
The memory manager uses
Zend_Cache backends
as storage providers.
Using Zend_Memory componentZend_Memory::factory() instantiates the memory
manager object with specified backend options.
'./tmp/' // Directory where to put the swapped memory blocks
);
$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] = '_';
]]>Theory of OperationZend_Memory component operates with the following concepts:
Memory managerMemory containerLocked memory objectMovable memory objectMemory manager
The memory manager generates memory objects (locked or movable)
by request of user application and returns them wrapped into
a memory container object.
Memory container
The memory container has a virtual or actual value
attribute of string type. This attribute contains the data value
specified at memory object creation time.
You can operate with this value attribute as
an object property:
create($data);
echo $memObject->value;
$memObject->value = $newValue;
$memObject->value[$index] = '_';
echo ord($memObject->value[$index1]);
$memObject->value = substr($memObject->value, $start, $length);
]]>
If you are using a PHP version earlier than 5.2, use the
getRef()
method instead of accessing the value property directly.
Locked memory
Locked memory objects are always stored in memory.
Data stored in locked memory are never swapped to the cache
backend.
Movable memory
Movable memory objects are transparently swapped and loaded
to/from the cache backend by Zend_Memory when it's necessary.
The memory manager doesn't swap objects with size less than
the specified minimum, due to performance considerations.
See this section
for more details.