- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
PHP 文档对 pg_free_result()
有这样的说法:
This function need only be called if memory consumption during script execution is a problem. Otherwise, all result memory will be automatically freed when the script ends.
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()
。
最佳答案
正如 Elias Van Ootegem 正确指出的那样,您几乎可以肯定使用了持久连接。对于查询后的持久连接,结果必须在内存中继续存在,因为您可能希望从中收集更多数据(例如最后一个错误)。
所以这归结为良好的实践。如果您在一个有 2M 可用内存的环境中操作,并且您的脚本有时可以达到 0.1M 内存,那么上限是 20 个调用该脚本的并发连接。之后,进一步的 Web 请求将排队或丢弃。无需天才就能意识到这对 DDoS 攻击的脆弱性。
那么,最佳做法是在用完内存后立即清空内存。这几乎适用于任何编程或脚本。当系统承受压力并且需求很高时,在整个内存范围内可以处理的请求越多越好。如果您可以降低脚本的最大内存占用量,则可以增加可以合理尝试调用它的并发连接数,从而增加脚本可以处理的负载。
理想的做事方式是尽快释放资源。仅仅因为我们不这样做,而且在测试期间一切似乎都正常,没有理由不这样做。
关于php - pg_free_result() 是否必要,即使结果超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554128/
PHP 文档对 pg_free_result() 有这样的说法: This function need only be called if memory consumption during scri
我是一名优秀的程序员,十分优秀!