不断遇到 PHP 脚本的奇怪问题。该脚本的想法是从 MySQL 表中获取一堆数据,对其进行处理,比较另一个表中的一些数据,然后将结果打印到 CSV 格式的文件中。
该脚本将运行数十万次迭代才能完成。我遇到的问题是,即使在数组上使用 unset() 并在我的 MySQL 查询上使用 free() ,内存仍会继续使用,直到迭代 350,000 左右,内存不足。
毫无疑问,每次我运行脚本时,memory_get_usage() 报告的内存分配保持不变,直到大约 1050 次迭代。然后它将恰好增加 262,144 字节。通过测试,它也总是在脚本中完全相同的位置递增。在下面的代码块中,它将始终在 b2a 的迭代之一中递增(最多 4 次可能的迭代)。
//up here we get the data to run analysis/comparisons on.
echo "{$lineCounter}b: " . memory_get_usage(TRUE) . "\n"; //27525120
if ($AttResults = $db_cx->query($ObsAttQuery)) {
echo "{$lineCounter}b1: " . memory_get_usage(TRUE) . "\n"; //27525120
$attArray = array();
echo "{$lineCounter}b2: " . memory_get_usage(TRUE) . "\n"; //27525120
while ($attRow = $AttResults->fetch_object()) {
echo "{$lineCounter}b2a {$attRow->attId}: " . memory_get_usage(TRUE) . "\n"; //27787264
$attArray[$attRow->attId] = $attRow->value;
}
echo "{$lineCounter}b3: " . memory_get_usage(TRUE) . "\n"; //27787264
$AttResults->free();
if (empty($attArray)) continue;
//down here after it is done I have an unset on the $attArray variable
有什么建议可以尝试吗??