当我对数据库进行查询并在 mysqli_result 中检索结果时,内存使用量非常小。但是,当我将查询结果中的所有行提取到关联数组中时,内存使用率变得非常高。
<?php
require_once("../config.php"); //db connection config
$db = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DBASE);
$query ="select * from table_name";
if($r = $db->query($query)){
echo "MEMORY USAGE before : ". memory_get_usage()."<br><br>";
$rows = array();
while($row = $r->fetch_assoc()){
$rows[]= $row;
}
echo "MEMORY USAGE after : ". memory_get_usage()."<br><br>";
//before: 660880
//after: 114655768
// # of records: around 30 thousands
?>
对我来说,存储这么多结果非常消耗内存,但我只是想知道为什么 mysqli_result 这么小。不可能每次调用fetch_assoc时都向数据库查询结果。那么结果存储在内存中的哪里呢?
获取结果和存储指向资源的指针之间存在巨大差异。
If you echo $r;
在您第一次致电之前memory_get_usage();
,你会意识到它只是一个指针。这是指向结果集的指针。直到你fetch
您的结果,结果集实际上不会存储到内存中。
我建议你跑fetchAll()
为了你想做的事。这将导致 1 个方法以更好的性能访问所有结果,因为它是在 mysqli 扩展(C 库)上使用的,而不是 PHP 中的循环。
当您使用完结果后,您还可以使用免费结果功能从内存中清除结果。如果您熟悉的话,这就像在 Java 中关闭游标一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)