Zend_Memory-MemoryManager.xml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <sect1 id="zend.memory.memory-manager">
  2. <title>内存管理器</title>
  3. <sect2 id="zend.memory.memory-manager.creation">
  4. <title>创建一个内存管理器</title>
  5. <para>
  6. 你可以使用<code>Zend_Memory::factory($backendName [, $backendOprions])</code>
  7. 方法创建一个新的内存管理器(<code>Zend_Memory_Manager</code> 对象).
  8. </para>
  9. <para>
  10. 第一个参数<code>$backendName</code>是一个字符串,他的名字是ZendCache提供的后端实现之一.
  11. </para>
  12. <para>
  13. 第二个参数<code>$backendOptions</code>是一个可选的后端选项参数.
  14. </para>
  15. <programlisting role="php"><![CDATA[
  16. $backendOptions = array(
  17. 'cache_dir' => './tmp/' // Directory where to put the swapped memory blocks
  18. );
  19. $memoryManager = Zend_Memory::factory('File', $backendOptions);
  20. ]]>
  21. </programlisting>
  22. <para>
  23. Zend_Memory使用<link linkend="zend.cache.backends">Zend_Cache backends</link>作为存储提供者.
  24. </para>
  25. <para>
  26. 除了标准的Zend_Cache后端之外,你可以使用特殊名称'<code>None</code>'作为后端名称.
  27. <programlisting role="php"><![CDATA[
  28. $memoryManager = Zend_Memory::factory('None');
  29. ]]>
  30. </programlisting>
  31. </para>
  32. <para>
  33. 如你是使用'<code>None</code>'作为后端名称,内城管理绝不会交换数据块.这在你知道内存没有做限制,
  34. 或则对象的总体大小绝不会超过内存限制的情况下非常有用.
  35. </para>
  36. <para>
  37. '<code>None</code>' 后端不需要任何特定的后端选项.
  38. </para>
  39. </sect2>
  40. <sect2 id="zend.memory.memory-manager.objects-management">
  41. <title>管理内存对象</title>
  42. <para>
  43. 这一节描述了在受管理的内存中创建和销毁对象,和控制内存管理的行为的设置.
  44. </para>
  45. <sect3 id="zend.memory.memory-manager.objects-management.movable">
  46. <title>创建可移动的对象</title>
  47. <para>
  48. 使用<code>Zend_Memory_Manager::create([$data])</code> 方法创建可移动的对象 (对象可以被交换):
  49. <programlisting role="php"><![CDATA[
  50. $memObject = $memoryManager->create($data);
  51. ]]>
  52. </programlisting>
  53. </para>
  54. <para>
  55. <code>$data</code>是可选的并且用于初始化对象的值.如果<code>$data</code>参数被省略,默认值为空字符串.
  56. </para>
  57. </sect3>
  58. <sect3 id="zend.memory.memory-manager.objects-management.locked">
  59. <title>创建锁定的对象</title>
  60. <para>
  61. 使用<code>Zend_Memory_Manager::createLocked([$data])</code>方法创建锁定的(对象不能被交换)对象:
  62. <programlisting role="php"><![CDATA[
  63. $memObject = $memoryManager->createLocked($data);
  64. ]]>
  65. </programlisting>
  66. </para>
  67. <para>
  68. <code>$data</code>是可选的并且用于初始化对象的值.如果<code>$data</code>参数被省略,默认值为空字符串.
  69. </para>
  70. </sect3>
  71. <sect3 id="zend.memory.memory-manager.objects-management.destruction">
  72. <title>销毁对象</title>
  73. <para>
  74. 当内存对象超出作用域它们被从内存管理器中自动销毁和删除:
  75. <programlisting role="php"><![CDATA[
  76. function foo()
  77. {
  78. global $memoryManager, $memList;
  79. ...
  80. $memObject1 = $memoryManager->create($data1);
  81. $memObject2 = $memoryManager->create($data2);
  82. $memObject3 = $memoryManager->create($data3);
  83. ...
  84. $memList[] = $memObject3;
  85. ...
  86. unset($memObject2); // $memObject2 is destroyed here
  87. ...
  88. // $memObject1 is destroyed here
  89. // but $memObject3 object is still referenced by $memList and is not destroyed
  90. }
  91. ]]>
  92. </programlisting>
  93. </para>
  94. <para>
  95. 应用和可移动对象和锁定对象.
  96. </para>
  97. </sect3>
  98. </sect2>
  99. <sect2 id="zend.memory.memory-manager.settings">
  100. <title>内存管理器设置</title>
  101. <sect3 id="zend.memory.memory-manager.settings.memory-limit">
  102. <title>内存限制</title>
  103. <para>
  104. 内存限制是可以被加载的可移动对象使用的一个字节数量.
  105. </para>
  106. <para>
  107. 如果加载和创建导致内存使用量超出了限制,内存管理将交换其他对象.
  108. </para>
  109. <para>
  110. 你可以使用<code>getMemoryLimit()</code> and <code>setMemoryLimit($newLimit)</code>方法
  111. 检索和设置内存限制:
  112. <programlisting role="php"><![CDATA[
  113. $oldLimit = $memoryManager->getMemoryLimit(); // Get memory limit in bytes
  114. $memoryManager->setMemoryLimit($newLimit); // Set memory limit in bytes
  115. ]]>
  116. </programlisting>
  117. </para>
  118. <para>
  119. 负值表示'没有限制'.
  120. </para>
  121. <para>
  122. 默认值是在php.ini配置文件中'<code>memory_limit</code>'选项的2/3大小,
  123. 否则如果'<code>memory_limit</code>'没有在php.ini中设置则为'没有限制'(-1)
  124. </para>
  125. </sect3>
  126. <sect3 id="zend.memory.memory-manager.settings.min-size">
  127. <title>MinSize</title>
  128. <para>
  129. 可以被内存管理器交换的最小对象大小.内存管理器不会交换小于此设置的对象.这是为了减少交换/加载操作的数量.
  130. </para>
  131. <para>
  132. 你可以分别使用<code>getMinSize()</code> 和 <code>setMinSize($newSize)</code>方法
  133. 检索和设置对象的最小大小:
  134. <programlisting role="php"><![CDATA[
  135. $oldMinSize = $memoryManager->getMinSize(); // Get MinSize in bytes
  136. $memoryManager->setMinSize($newSize); // Set MinSize limit in bytes
  137. ]]>
  138. </programlisting>
  139. </para>
  140. <para>
  141. 默认的最小大小是16KB(16384字节).
  142. </para>
  143. </sect3>
  144. </sect2>
  145. </sect1>