1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.memory.overview">
<title>Übersicht</title>
<sect2 id="zend.memory.introduction">
<title>Einführung</title>
<para>
Die <classname>Zend_Memory</classname> Komponente ist dafür gedacht Daten in
Systemen mit limitiertem Speicher zu Verwalten.
</para>
<para>
Memory Objekte (Memory Container) werden durch den Memory Manager
bei Anfrage erzeugt und transparent geswappt/geladen wenn dies
notwendig wird.
</para>
<para>
Wenn, zum Beispiel, ein gemanagtes Objekt erzeugt oder geladen wird,
das den gesamten Speicherverbrauch überschreiten würde, der vorher
definiert wurde, werden einige gemanagte Objekte in den Cache Speicher
ausserhalb des Speichers kopiert. Auf diesen Weg wird der Gesamtspeicher
der von den gemanagten Objekten verwendet wird nicht das benötigte
Limit überschreiten.
</para>
<para>
Der Memory Manager verwendet
<link linkend="zend.cache.backends">Zend_Cache backends</link>
als Speicheranbieter.
</para>
<example id="zend.memory.introduction.example-1">
<title>Verwenden der Zend_Memory Komponente</title>
<para>
<methodname>Zend_Memory::factory()</methodname> instantiiert das Speichermanager
Objekt mit den definierten Backend Optionen.
</para>
<programlisting language="php"><![CDATA[
// Verzeichnis in welches die getauschten Speicherblöcke geschrieben werden
$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] = '_';
]]></programlisting>
</example>
</sect2>
<sect2 id="zend.memory.theory-of-operation">
<title>Theorie der Verwendung</title>
<para>
Die <classname>Zend_Memory</classname> Komponente arbeitet mit den folgenden Konzepten:
<itemizedlist>
<listitem><para>Memory Manager</para></listitem>
<listitem><para>Memory Container</para></listitem>
<listitem><para>Verschlüsseltes Memory Objekt</para></listitem>
<listitem><para>Verschiebbares Memory Objekt</para></listitem>
</itemizedlist>
</para>
<sect3 id="zend.memory.theory-of-operation.manager">
<title>Memory Manager</title>
<para>
Der Memory Manager erzeugt Memory Objekte (gesperrt oder verschiebbar)
durch Anfrage der Anwendung des Benutzers und gibt diese
in einem Memory Container Objekt zurück.
</para>
</sect3>
<sect3 id="zend.memory.theory-of-operation.container">
<title>Memory Container</title>
<para>
Der Memory Container hat ein virtuelles oder aktuelles Attribut
<property>value</property> vom Typ String. Dieses
Attribut enthält Datenwerte die bei der Erstellung des
Memory Objektes definiert werden.
</para>
<para>
Es kann mit <property>value</property> Attributen wie auch mit
Objekt Eigenschaften gearbeitet werden.
</para>
<programlisting language="php"><![CDATA[
$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);
]]></programlisting>
<note>
<para>
Wenn eine <acronym>PHP</acronym> Version vor 5.2 verwendet wird, sollte
stattdessen die <link
linkend="zend.memory.memory-objects.api.getRef">getRef()</link> Methode
verwendet werden statt direkt auf die Wert Eigenschaften zuzugreifen.
</para>
</note>
</sect3>
<sect3 id="zend.memory.theory-of-operation.locked">
<title>Verschlüsselter Memory</title>
<para>
Verschlüsselte Speicher Objekte werden immer im Speicher gespeichert.
Daten welche im verschlüsselten Speicher gespeichert sind, werden
niemals in das Cache Backend getauscht.
</para>
</sect3>
<sect3 id="zend.memory.theory-of-operation.movable">
<title>Verschiebbarer Memory</title>
<para>
Verschiebbare Memory Objekte werden transparent geswappt und geladen von und in das
Cache Backend durch <classname>Zend_Memory</classname> wenn das notwendig wird.
</para>
<para>
Der Memory Manager swappt keine Objekte die eine kleinere Größe
als das definierte Minimum besitzen, und zwar aus Gründen der
Geschwindigkeit. Siehe
<link linkend="zend.memory.memory-manager.settings.min-size">diesen Abschnitt</link>
für mehr Details.
</para>
</sect3>
</sect2>
</sect1>
|