[英]Using MySQLi - which is better for closing queries
我养成了将变量使用率保持在最低限度的习惯。 所以我想知道以下是否有任何好处:
$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');
// Example 1
$query = $query->fetch_assoc();
// Example 2
$query_r = $query->fetch_assoc();
$query->free();
现在,如果我是对的,那么示例1应该更高效,因为当我重新分配它时, unset
$query
,这应该释放与之关联的任何内存。 然而,有一个方法( MySQLi_Result::free()
)释放相关的内存 - 这是一回事吗?
如果我不调用::free()
来释放与结果相关的任何内存,但是通过重新分配变量来unset
它我做同样的事情吗? 我不知道如何记录这类事情 - 有没有人有一些想法?
手册似乎建议你仍然应该使用free()
来释放内存。 我相信原因是free()
释放了MySQL中的内存,而不是PHP。 由于PHP无法为MySQL进行垃圾收集,因此需要调用free()
。
实施例1 解离从MySQL结果$查询变量。 MySQL结果仍然存在于内存中,并将继续存在并浪费内存直到垃圾收集发生。
实施例2立即释放 MySQL的结果,释放使用的资源。
但是,由于PHP页面通常具有较短的结果集,因此节省的内存非常简单。 除非您长时间在长时间运行的页面上留下大量内存,否则您不会注意到速度减慢。
Brian,PHP 可以垃圾收集MySQL结果,它不会立即发生。 结果存在于PHP的内存池中,而不是MySQL服务器中。
(使用无缓冲查询时内存的位置略有不同,但它们在PHP中很少使用,因此不值得一提)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.