Zend_Memory-Overview.xml 5.7 KB

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