假設您有一個查詢,並且您確切知道將返回多少結果以及每列的長度,例如, 1M記錄int `id`, char(100) `uid`
。有沒有方法可以估計PHP數組將消耗多少內存?
有沒有辦法事先知道PHP需要爲這個關聯數組分配多少內存?
假設您有一個查詢,並且您確切知道將返回多少結果以及每列的長度,例如, 1M記錄int `id`, char(100) `uid`
。有沒有方法可以估計PHP數組將消耗多少內存?
有沒有辦法事先知道PHP需要爲這個關聯數組分配多少內存?
最好的辦法是做這樣的事情:
$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註明)。 「百萬項數組消耗多少內存」的答案是「太多」。考慮分頁或類似來減少你需要的項目數量。
有趣的閱讀:http://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html – Flosculus
取決於PHP的版本,但返回一百萬記錄可能會打破銀行。如果您必須返回一百萬條記錄(特別是您事先知道數字),請考慮使用SPLFixedArray而不是標準的PHP數組;或者考慮處理每條記錄,因爲它被提取 –
如果您希望您的查詢具有如此大的結果集,請僅說「不」。將結果進行流式處理並分塊處理。 – Jon