gpt4 book ai didi

PHP 数组插入/操作在迭代中降级

转载 作者:行者123 更新时间:2023-11-29 23:30:02 24 4
gpt4 key购买 nike

我正在将数据从一个数据库传输到另一个数据库。它们是不同的数据库(mssql 到 mysql),所以我不能直接查询,而是使用 PHP 作为中介。考虑以下代码。由于某种原因,每次执行 while 循环所需的时间都是之前的两倍。

$continue = true;
$limit = 20000;

while($continue){
$i = 0;
$imp->endTimer();
$imp->startTimer("Fetching Apps");

$qry = "THIS IS A BASIC SELECT QUERY";
$data = $imp->src->dbQuery($qry, array(), PDO::FETCH_ASSOC);

$inserts = array();
$continue = (count($data) == $limit);

$imp->endTimer();
$imp->startTimer("Processing Apps " . memory_get_usage() );

if($data == false){
$continue = false;
}
else{
foreach($data AS $row){

// THERE IS SOME EXTREMELY BASIC IF STATEMENTS HERE

$inserts[] = array(
"paymentID"=>$paymentID,
"ticketID"=>$ticketID,
"applicationLink"=>$row{'ApplicationID'},
"paymentLink"=>(int)($paymentLink),
"ticketLink"=>(int)($ticketLink),
"dateApplied"=>$row{'AddDate'},
"appliedBy"=>$adderID,
"appliedAmount"=>$amount,
"officeID"=>$imp->officeID,
"customerID"=>-1,
"taxCollected"=>0
);
$i++;
$minID = $row{'ApplicationID'};
}
}


$imp->endTimer();
$imp->startTimer("Inserting $i Apps");

if(count($inserts) > 0){
$imp->dest->dbBulkInsert("appliedPayments", $inserts);
}

unset($data);
unset($inserts);
echo "Inserted $i Apps<BR>";
}

无论我设置什么限制,处理部分每次都会花费两倍的时间。我正在记录循环的每个部分,并从旧数据库中选择数据并将其插入到新数据库中,这一点都不花时间。 “处理部分”每次都会加倍。为什么?以下是日志,如果您对时间戳进行一些快速计算,标记为“处理应用程序”的每个步骤所花费的时间是之前的两倍...(我在这一步中提前停止了它,但它花费了相当多的时间)最终迭代的时间较长)

logs

最佳答案

嗯 - 所以我不知道为什么会这样,但是如果我将 while 循环内的所有内容移到一个单独的函数中,它会显着提高性能。我猜测这是一个垃圾收集/内存管理问题,并且函数调用结束可以帮助垃圾收集器知道它可以释放内存。现在,当我记录内存使用情况时,内存使用情况在调用之间保持不变,而不是增长...肮脏的 php...

关于PHP 数组插入/操作在迭代中降级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26648215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com