使用 MySQLi - 这对于关闭查询更好
题
我有一个习惯,就是将变量的使用保持在最低限度。所以我想知道以下是否有任何好处:
$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 应该更有效 $query
是 unset
当我重新分配它时,它应该释放与其关联的任何内存。不过有一个方法(MySQLi_Result::free()
)它释放关联的内存 - 这是同一件事吗?
如果我不打电话 ::free()
释放与结果相关的任何内存,但是 unset
通过重新分配变量我在做同样的事情吗?我不知道如何记录这类事情 - 有人有一些想法吗?
解决方案
这 手动的 似乎建议您仍然应该使用 free()
来释放内存。我相信原因是 free()
正在释放内存 MySQL, ,不在 PHP 中。由于 PHP 无法对 MySQL 进行垃圾收集,因此您需要调用 free()
.
其他提示
实施例1 解离 来自 MySQL 结果的 $query 变量。MySQL结果仍然存在于内存中,并且会继续存在并浪费内存,直到发生垃圾回收。
实施例2 自由 MySQL立即返回结果,释放所使用的资源。
然而,由于 PHP 页面通常寿命较短且结果集较小,因此节省的内存微不足道。除非你离开,否则你不会注意到速度减慢 一吨 长时间运行的页面上长时间内存中的结果。
Brian,PHP 能 对 MySQL 结果进行垃圾收集,它只是不会立即发生。结果存在于 PHP 的内存池中,而不是 MySQL 服务器的内存池中。
(使用无缓冲查询时的内存位置略有不同,但它们在 PHP 中很少使用,因此不值得一提)
不隶属于 StackOverflow