假设您有一个查询,并且您确切地知道它将返回多少结果以及每列的长度,例如1M记录int `id`, char(100) `uid`
。
有没有办法事先知道PHP需要为这个关联数组分配多少内存?
答案 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所说)。答案是"一百万个项目阵列消耗多少内存"是太多"。考虑分页等,以减少您需要的项目数量。