假设您有一个查询,并且您确切知道它将返回多少个结果以及每列的长度,例如 1M 条记录int `id`, char(100) `uid`
。
有没有办法提前知道 PHP 需要为这个关联数组分配多少内存?
只是不要将 1M 记录分配为关联数组。仅选择您需要的数据。
找出答案的最佳方法是执行以下操作:
$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 指出的那样)。“一百万个数组将消耗多少内存”的答案是“太多”。考虑分页等以减少您需要的项目数量。