目前我的应用程序使用大约7 MB的内存。巨大的阵列需要更多的内存空间比它应该
如果我用strlen(serialize($array))))
检查它的大小,该阵列似乎使用700 KB。
如果使用这个数组我的应用程序中,并检查内存使用情况(与
memory_get_peak_usage()
)我得到14 MB。如果我不使用它,我会得到7 MB。
如果这个数组需要700 KB序列化,为什么PHP需要7 MB的这个变量?还是我以错误的方式做基准?
目前我的应用程序使用大约7 MB的内存。巨大的阵列需要更多的内存空间比它应该
如果我用strlen(serialize($array))))
检查它的大小,该阵列似乎使用700 KB。
如果使用这个数组我的应用程序中,并检查内存使用情况(与memory_get_peak_usage()
)我得到14 MB。
如果我不使用它,我会得到7 MB。
如果这个数组需要700 KB序列化,为什么PHP需要7 MB的这个变量?还是我以错误的方式做基准?
如果你困扰你,你想摆脱PHP的束缚:http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html。 PHP阵列就像一些生活空间。
如果可能,您可以使用SplFixedArray
,但是再次关心PHP数组占用的空间。如果你正在寻找干净/性能的东西,为什么你首先使用PHP(是的,这是来自一个PHP的家伙):)
@brad tnx!在星期六晚上回答问题时,我需要像你这样的人:D – PeeHaa 2012-08-11 23:39:05
谢谢我将尝试将我的数组转换为“SplFixedArray”,但需要很长时间:) – ellabeauty 2012-08-11 23:44:25
@Petra,没问题!现在我们只需要一个StackOverflow喝酒游戏...... – Brad 2012-08-11 23:46:56
序列化格式可以做一些内存优化,因为他们不需要有对象存在于内存中并且具有完全的可访问性。他们只保留数据的完整性,而不是可访问性。如果这有助于回答你的问题一点。
这是什么数组/对象?在内存中表示真实对象可能需要比文本版本更多的分配。 – Brad 2012-08-11 23:32:37
包含所有utf8字符及其ASCII对等字符的表。好的,但是10倍以上? – ellabeauty 2012-08-11 23:33:29
如果使用'memory_get_usage',该怎么办? 'memory_get_peak_usage'向你展示'peak'使用情况 – zerkms 2012-08-11 23:36:20