2012-08-11 45 views
8

目前我的应用程序使用大约7 MB的内存。巨大的阵列需要更多的内存空间比它应该

如果我用strlen(serialize($array))))检查它的大小,该阵列似乎使用700 KB。

  • 如果使用这个数组我的应用程序中,并检查内存使用情况(与memory_get_peak_usage())我得到14 MB。

  • 如果我不使用它,我会得到7 MB。

如果这个数组需要700 KB序列化,为什么PHP需要7 MB的这个变量?还是我以错误的方式做基准?

+1

这是什么数组/对象?在内存中表示真实对象可能需要比文本版本更多的分配。 – Brad 2012-08-11 23:32:37

+0

包含所有utf8字符及其ASCII对等字符的表。好的,但是10倍以上? – ellabeauty 2012-08-11 23:33:29

+1

如果使用'memory_get_usage',该怎么办? 'memory_get_peak_usage'向你展示'peak'使用情况 – zerkms 2012-08-11 23:36:20

回答

10

如果你困扰你,你想摆脱PHP的束缚:http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html。 PHP阵列就像一些生活空间。

如果可能,您可以使用SplFixedArray,但是再次关心PHP数组占用的空间。如果你正在寻找干净/性能的东西,为什么你首先使用PHP(是的,这是来自一个PHP的家伙):)

+1

@brad tnx!在星期六晚上回答问题时,我需要像你这样的人:D – PeeHaa 2012-08-11 23:39:05

+0

谢谢我将尝试将我的数组转换为“SplFixedArray”,但需要很长时间:) – ellabeauty 2012-08-11 23:44:25

+2

@Petra,没问题!现在我们只需要一个StackOverflow喝酒游戏...... – Brad 2012-08-11 23:46:56

1

序列化格式可以做一些内存优化,因为他们不需要有对象存在于内存中并且具有完全的可访问性。他们只保留数据的完整性,而不是可访问性。如果这有助于回答你的问题一点。