Docs PHP mają do powiedzenia na temat pg_free_result()
:Czy pg_free_result() jest konieczne, nawet jeśli wynik wykracza poza zakres?
Funkcja ta musi być wywołana tylko jeśli zużycie pamięci podczas wykonywania skryptu jest problemem. W przeciwnym razie pamięć wyników zostanie automatycznie zwolniona po zakończeniu działania skryptu.
http://www.php.net/manual/en/function.pg-free-result.php
Chciałbym (być może naiwnie) oczekiwać zasób zwrócony przez wywołanie pg_query()
być zbierane śmieci kiedy wykracza poza zakres.
W hipotetycznej funkcji takich jak to:
function selectSomething()
{
$res = pg_query("SELECT blah FROM sometable");
// do something with $res
pg_free_result($res); // required or not?
}
Czy to naprawdę konieczne, aby zadzwonić pg_free_result()
na końcu?
Innymi słowy, jeśli zadzwonię do tej funkcji 1000 razy, czy zajmie ona pamięć do przechowywania wszystkich 1000 wyników?
EDYCJA: Mówię o typowym przypadku, tj. pg_connect()
zamiast pg_pconnect()
.
Zależy, czy wymuszasz nowe połączenie PG, czy połączenie jest trwałe? Jeśli używasz trwałych połączeń, [zasób może nie być GC'ed] (http://www.php.net/manual/en/language.types.resource.php). Ale dlaczego nie profilować skryptu.Napisz małą próbkę i sprawdź zużycie pamięci. Jeśli ciągle rośnie do końca skryptu, dodaj 'pg_free_result' i uruchom go ponownie ... –
Jest to bardziej ogólne pytanie, niezależnie od rodzaju połączenia. Wiem, że mógłbym napisać test, ale denerwuje mnie to, że dokumentacja jest tak niejasna. Jednorazowy test odpowie na moje pytanie tylko dla jednej konkretnej platformy i wersji (PHP i/lub libpq). – Zilk
Właściwie masz dobry punkt. Zmieniłem to pytanie, stwierdzając, że mówię o 'pg_connect()'. – Zilk