Các tài liệu PHP có điều này để nói về pg_free_result()
:Có cần pg_free_result(), ngay cả khi kết quả nằm ngoài phạm vi?
Chức năng này chỉ cần được gọi là nếu tiêu thụ bộ nhớ trong kịch bản thực hiện là một vấn đề. Nếu không, tất cả bộ nhớ kết quả sẽ là sẽ tự động được giải phóng khi tập lệnh kết thúc.
http://www.php.net/manual/en/function.pg-free-result.php
tôi sẽ (có lẽ ngây thơ) đã dự kiến các nguồn lực được trả về bởi một cuộc gọi đến pg_query()
để được thu gom rác khi nó đi ra khỏi phạm vi.
Trong một hàm giả thuyết như thế này:
function selectSomething()
{
$res = pg_query("SELECT blah FROM sometable");
// do something with $res
pg_free_result($res); // required or not?
}
Là nó thực sự cần thiết để gọi pg_free_result()
ở cuối?
Nói cách khác, nếu tôi gọi hàm này 1000 lần, nó sẽ ăn bộ nhớ để lưu trữ tất cả 1000 kết quả?
EDIT: Tôi đang nói về trường hợp điển hình, tức là pg_connect()
thay vì pg_pconnect()
.
Tùy thuộc, bạn có đang buộc kết nối pg mới hay kết nối liên tục không? Nếu bạn đang sử dụng kết nối liên tục, [tài nguyên có thể không phải là GC'ed] (http://www.php.net/manual/en/language.types.resource.php). Nhưng tại sao không hồ sơ kịch bản.Viết một ít test-case và kiểm tra việc sử dụng bộ nhớ. Nếu nó tiếp tục tăng cho đến khi kết thúc tập lệnh, hãy thêm 'pg_free_result' và chạy lại ... –
Đây là câu hỏi chung hơn, bất kể loại kết nối. Tôi biết tôi chỉ có thể viết một bài kiểm tra, nhưng nó làm phiền tôi rằng tài liệu đó rất mơ hồ. Thử nghiệm một lần sẽ chỉ trả lời câu hỏi của tôi cho một nền tảng và phiên bản cụ thể (PHP và/hoặc libpq). – Zilk
Thực ra, bạn đã có một điểm tốt ở đó. Tôi đã chỉnh sửa câu hỏi để nói rằng tôi đang nói về 'pg_connect()'. – Zilk