我的控制台命令(基于Symfony)中的简单更新存在问题。
这是我的代码:
private
function showMemoryUsage()
{
$memory = memory_get_usage();
$memory/= 1024;
if ($memory < 1024) {
$this->output->writeln('Memory usage: ' . round($memory, 2) . ' KB');
return;
}
$memory/= 1024;
if ($memory < 1024) {
$this->output->writeln('Memory usage: ' . round($memory, 2) . ' MB');
return;
}
$memory/= 1024;
if ($memory < 1024) {
$this->output->writeln('Memory usage: ' . round($memory, 2) . ' GB');
return;
}
}
// ...
$stmt = $conn->prepare("UPDATE product_counters SET counter = :count WHERE id = :id");
$this->showMemoryUsage();
foreach($cursor as $k => $counterData) {
if ($counterData['_id']) {
$stmt->execute([':count' => (int)$counterData['count'], ':id' => (int)$counterData['_id']]);
$stmt->closeCursor();
}
}
$this->showMemoryUsage();
我必须更新88 000行。
首次使用内存仅为14 MB。第二个内存使用量约为400 MB。如何减少这种用量?我试过使用gc_enable
&amp;&amp; gc_collect_cycles
,我试图在foreach之后取消$stmt
,但没有结果。你能建议一种减少内存使用的方法吗?