有没有办法估计PHP数组将消耗多少内存?

时间:2013-08-07 08:53:32

标签: php pdo

假设您有一个查询,并且您确切地知道它将返回多少结果以及每列的长度,例如1M记录int `id`, char(100) `uid`

有没有办法事先知道PHP需要为这个关联数组分配多少内存?

2 个答案:

答案 0 :(得分:1)

不要将1M记录分配为关联数组。只选择您需要的数据。

答案 1 :(得分:0)

最好的方法是做一些像:

$numItems = 1000000;
$bytes = memory_get_usage();
$arr = array();
$arrBytes = memory_get_usage() - $bytes;
$arr[] = array('id'=>1,'uid'=>str_repeat("a",100));
$itemBytes = memory_get_usage() - $bytes - $arrBytes;
echo "Total memory usage estimate: ".($arrBytes + ($itemBytes * $numItems));

免责声明:我不完全确定这是多么准确,但应该给予一个大概。对于不同的系统(即32位整数与64位整数)和不同的编码(即单字节与多字节),这也会有所不同。

说完这一切(并且正如@YourCommonSense所说)。答案是"一百万个项目阵列消耗多少内存"是太多"。考虑分页等,以减少您需要的项目数量。