Rozdział 30. Zend_Memory

Spis treści

30.1. Overview
30.1.1. Introduction
30.1.2. Theory of Operation
30.1.2.1. Memory manager
30.1.2.2. Memory container
30.1.2.3. Locked memory
30.1.2.4. Movable memory
30.2. Memory Manager
30.2.1. Creating a Memory Manager
30.2.2. Managing Memory Objects
30.2.2.1. Creating Movable Objects
30.2.2.2. Creating Locked Objects
30.2.2.3. Destroying Objects
30.2.3. Memory Manager Settings
30.2.3.1. Memory Limit
30.2.3.2. MinSize
30.3. Memory Objects
30.3.1. Movable
30.3.2. Locked
30.3.3. Memory container 'value' property.
30.3.4. Memory container interface
30.3.4.1. getRef() method
30.3.4.2. touch() method
30.3.4.3. lock() method
30.3.4.4. unlock() method
30.3.4.5. isLocked() method

30.1. Overview

30.1.1. Introduction

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.

Przykład 30.1. Using Zend_Memory component

Zend_Memory::factory() instantiates the memory manager object with specified backend options.

$backendOptions = array(
    'cache_dir' => './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] = '_';

                

30.1.2. Theory of Operation

Zend_Memory component operates with the following concepts:

  • Memory manager

  • Memory container

  • Locked memory object

  • Movable memory object

30.1.2.1. Memory manager

The memory manager generates memory objects (locked or movable) by request of user application and returns them wrapped into a memory container object.

30.1.2.2. 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:

$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);

                

[Notatka] Notatka

If you are using a PHP version earlier than 5.2, use the getRef() method instead of accessing the value property directly.

30.1.2.3. Locked memory

Locked memory objects are always stored in memory. Data stored in locked memory are never swapped to the cache backend.

30.1.2.4. 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 Sekcja 30.2.3.2, „MinSize” for more details.