【发布时间】:2013-05-09 09:07:41
【问题描述】:
PHP 文档对pg_free_result() 有这样的说法:
只有在脚本期间内存消耗时才需要调用此函数 执行是个问题。否则,所有结果内存将 脚本结束时自动释放。
http://www.php.net/manual/en/function.pg-free-result.php
我会(也许天真地)期望通过调用 pg_query() 返回的资源在超出范围时会被垃圾回收。
在这样的假设函数中:
function selectSomething ()
{
$res = pg_query("SELECT blah FROM sometable");
// do something with $res
pg_free_result($res); // required or not?
}
真的有必要在最后调用pg_free_result()吗?
换句话说,如果我调用这个函数 1000 次,它会占用内存来存储所有 1000 个结果吗?
编辑:我说的是典型案例,即pg_connect() 而不是pg_pconnect()。
【问题讨论】:
-
取决于,你是在强制一个新的 pg 连接,还是连接是持久的?如果您使用的是持久连接,the resource might not be GC'ed。但为什么不分析脚本。编写一个小测试用例并检查内存使用情况。如果一直增加直到脚本结束,添加
pg_free_result,然后再次运行... -
这是一个更普遍的问题,无论连接类型如何。我知道我可以只写一个测试,但是文档是如此模糊,这让我很困扰。一次性测试只能回答我针对一个特定平台和版本(PHP 和/或 libpq)的问题。
-
实际上,你有一个很好的观点。我已经编辑了问题以声明我正在谈论
pg_connect()。
标签: php postgresql memory-leaks