PrésentationIntroduction
Le composant Zend_Memory est destiné à gérer des données
dans un environnement où la mémoire est limitée.
Les objets mémoire (conteneurs de mémoire) sont produits par le manager de mémoire
sur demande et mis en cache/chargés d'une manière transparente quand c'est
nécessaire.
Par exemple, si la création ou le chargement d'un objet entraîne une utilisation
de mémoire totale excédant la limite que vous spécifiez, certains objets gérés sont
copiés en cache à l'extérieur de la mémoire. De cette façon, la mémoire totale utilisée
par les objets gérés n'excède pas la limite que vous devez mettre en application.
Le manager de mémoire utilise les backends
Zend_Cache comme fournisseurs de stockage.
Utiliser le composant Zend_MemoryZend_Memory::factory() instancie l'objet de management
de la mémoire avec les options spécifiques du backend.
'./tmp/'
// Dossier où les blocks de mémoire peuvent être stockés
);
$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] = '_';
]]>Aspect théoriqueZend_Memory travaille avec les concepts suivants :
Manager de mémoireConteneur de mémoireObjet de mémoire verrouilléObjet de mémoire mobileManager de mémoire
Le manager de mémoire produit des objets de mémoire (verrouillé ou mobile) sur
demande de l'utilisateur et les retourne encapsulé dans un objet conteneur de
mémoire.
Conteneur de mémoire
Le conteneur de mémoire a un attribut value virtuel ou réel de
type chaîne de caractères. Cet attribut contient la valeur de donnée indiquée au
moment de la création de l'objet mémoire.
Vous pouvez exploiter cet attribut value comme une propriété
d'objet : create($data);
echo $memObject->value;
$memObject->value = $newValue;
$memObject->value[$index] = '_';
echo ord($memObject->value[$index1]);
$memObject->value = substr($memObject->value, $start, $length);
]]>
Si vous utilisez une version de PHP inférieure à 5.2, utilisez la méthode
getRef() au lieu
d'accéder directement à la valeur de la propriété.
Objet de mémoire verrouillé
Les objets de mémoire verrouillés sont toujours stockés dans la mémoire. Les
données stockées dans la mémoire verrouillée ne sont jamais mis en cache.
Objet de mémoire mobile
Les objets de mémoire mobiles sont mis en cache et chargés de manière
transparente de/vers le cache par Zend_Memory si c'est
nécessaire.
Le manager de mémoire ne met pas en cache des objets ayant une taille plus
petite que le minimum spécifié dans un soucis de performances. Voir
cette section
pour plus de détails.