Php 减少阵列和SplFixedArray的内存使用
我在Php 减少阵列和SplFixedArray的内存使用,php,arrays,memory-management,Php,Arrays,Memory Management,我在array()和SplFixedArray()之间做了一些基准测试,我遇到了奇怪的行为。首先,看看我的简单测试(它实际上只是从互联网上编辑的版本,对不起,我现在找不到原始源代码): 为什么第二次测试使用的内存比第一次少?嘿,我尝试添加下一个测试: > Testing size: 64,000 Array() - Write - time : 0.008963823318481400 - memory: 7.50 MB (7864320 by
array()
和SplFixedArray()
之间做了一些基准测试,我遇到了奇怪的行为。首先,看看我的简单测试(它实际上只是从互联网上编辑的版本,对不起,我现在找不到原始源代码):
为什么第二次测试使用的内存比第一次少?嘿,我尝试添加下一个测试:
> Testing size: 64,000
Array()
- Write - time : 0.008963823318481400 - memory: 7.50 MB (7864320 bytes)
- Read - time : 0.004142045974731400
SplFixedArray()
- Write - time : 0.005026102066040000 - memory: 1.75 MB (1835008 bytes)
- Read - time : 0.005756139755249000
SplFixedArray()
- Write - time : 0.004483938217163100 - memory: 1.50 MB (1572864 bytes)
- Read - time : 0.005591869354248000
SplFixedArray()
- Write - time : 0.004633903503418000 - memory: 1.25 MB (1310720 bytes)
- Read - time : 0.005697011947631800
因此,我当然会尝试添加越来越多的内容,在512kb上停止了几次之后。我这里的问题很明显:这是怎么可能的,为什么当我取消设置以前的对象并创建新对象时,使用的内存较低?并且它也适用于普通的
数组()
。如果我们想了解这一点,我们需要进入引擎。更好:在里面
内存管理器分配的内存被分割为多个内存块
释放SPLFixedArray后。始终保留一个256 KB的块(一些变量),然后进行累积。(作为操作系统分配内存的下一个工作区,将与此内存块相邻)
然后,在可能的情况下,下次使用该内存段,而不是从操作系统分配新内存。(如有必要,可添加一些内存)
但由于至少有一个256KB的块总是被释放,我们总是会注意到256KB的差异
当您想要测量内存使用情况时,我真的会使用
memory\u get\u usage(false)
,因为它指示您有多少内存(≠ (d)需要。(唯一与内存限制
ini设置相对应的是)您是一个接一个地进行了每个测试,还是在测试之间重置了服务器?你确定没有任何缓存工作吗?我试着在两台完全不同的服务器上运行,但至少有一台没有缓存。嗯,你可以自己在自己的环境中尝试一下,看看它是否也适用于你……嗨,你有没有可以下载的文件?如果这几天我有时间,我可以试试。源代码在我的帖子里。如果您想复制它,只需在前一个数组的unset
之后复制SplFixedArray
测试并复制它即可。你想说多少遍就说多少遍。非常感谢你的回答,赏金当然是你的了。
> Testing size: 64,000
Array()
- Write - time : 0.009041070938110400 - memory: 7.50 MB (7864320 bytes)
- Read - time : 0.004010915756225600
SplFixedArray()
- Write - time : 0.004639148712158200 - memory: 1.75 MB (1835008 bytes)
- Read - time : 0.005971908569335900
SplFixedArray()
- Write - time : 0.005653858184814500 - memory: 1.50 MB (1572864 bytes)
- Read - time : 0.006288051605224600
> Testing size: 64,000
Array()
- Write - time : 0.008963823318481400 - memory: 7.50 MB (7864320 bytes)
- Read - time : 0.004142045974731400
SplFixedArray()
- Write - time : 0.005026102066040000 - memory: 1.75 MB (1835008 bytes)
- Read - time : 0.005756139755249000
SplFixedArray()
- Write - time : 0.004483938217163100 - memory: 1.50 MB (1572864 bytes)
- Read - time : 0.005591869354248000
SplFixedArray()
- Write - time : 0.004633903503418000 - memory: 1.25 MB (1310720 bytes)
- Read - time : 0.005697011947631800