gpt4 book ai didi

php - pg_free_result() 是否必要,即使结果超出范围?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:00 31 4
gpt4 key购买 nike

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com