10/10/2018, 10:47

Giải phóng bộ nhớ trong php cách nào tối ưu

Chào các bạn ! cho mình hỏi chút

Trong một file .php giả sử mình có đoạn code như sau:

$result = mysql_query($sql,$conn) ;
while($rows = mysql_fetch_array($result))
{
//ma code o day
}
//giai phong bo nho
mysql_free_result($result);

Trong file này có rất nhiều đoạn code như trên, cứ sau khi mình lấy được bản ghi thì mình thực hiện lệnh giải phóng bộ nhớ luôn.
Vậy làm thế này tối ưu hay để cuối trang mới để dòng lệnh giải phóng một lần thôi để tránh cho việc server cứ phải liên tục thực hiện lệnh giải phóng bộ nhớ sẽ làm chậm đi tốc độ xử lý trang web.

- Giải phóng luôn tiết kiệm bộ nhớ nhưng có thể làm chậm.
- Cuối trang mới giải phóng. Lãng phí bộ nhớ nhưng có thể load nhanh

Theo các bạn mình nên chọn cách nào là hợp lý ?
geany viết 12:59 ngày 10/10/2018
Garbage collector nó tự làm mà bạn, ko sao đâu
haindse viết 12:56 ngày 10/10/2018
mysql_free_result($result); -> theo tôi thì bạn nên để cái này ở cuối file PHP. Tức là khi đã thực hiện hết các công việc rồi thì mới gọi hàm này ra.
Linhnh_ viết 12:53 ngày 10/10/2018
Được gửi bởi nam0504
Chào các bạn ! cho mình hỏi chút

Trong một file .php giả sử mình có đoạn code như sau:

$result = mysql_query($sql,$conn) ;
while($rows = mysql_fetch_array($result))
{
//ma code o day
}
//giai phong bo nho
mysql_free_result($result);

Trong file này có rất nhiều đoạn code như trên, cứ sau khi mình lấy được bản ghi thì mình thực hiện lệnh giải phóng bộ nhớ luôn.
Vậy làm thế này tối ưu hay để cuối trang mới để dòng lệnh giải phóng một lần thôi để tránh cho việc máy tính cứ phải liên tục thực hiện lệnh giải phóng bộ nhớ sẽ làm chậm đi tốc độ xử lý trang web.

Theo các bạn mình nên chọn cách nào là hợp lý ?
Chỉ dùng 1 lệnh mysql_free_result ($result) ở cuối main file thôi bạn. Nếu trong 1 funtion bạn gọi lệnh này thì sau đó nếu dùng các câu lệnh truy vấn dữ liệu khác sẽ bị lỗi!
thuyduongcd viết 12:54 ngày 10/10/2018
Dư thừa
Vì khi gọi câu này
Code:
$result = mysql_query($sql,$conn) ;
Nó sẽ làm luôn phần này
Code:
mysql_free_result($result);
mysql_free_result($result); -> theo tôi thì bạn nên để cái này ở cuối file PHP. Tức là khi đã thực hiện hết các công việc rồi thì mới gọi hàm này ra.
Cũng dư nốt! Vì sau khi làm hết các công việc rồi thì server trả về cho client, bộ nhớ sẽ tự động được giải phóng.

Tóm lại, mysql_free_result($result) chỉ nên dùng khi nào bạn cho rằng kết quả truy vấn có khả năng cực kỳ lớn.
hoanghon2005 viết 12:59 ngày 10/10/2018
Được gửi bởi thuyduongcd
Dư thừa
Vì khi gọi câu này
Code:
$result = mysql_query($sql,$conn) ;
Nó sẽ làm luôn phần này
Code:
mysql_free_result($result);

Cũng dư nốt! Vì sau khi làm hết các công việc rồi thì server trả về cho client, bộ nhớ sẽ tự động được giải phóng.

Tóm lại, mysql_free_result($result) chỉ nên dùng khi nào bạn cho rằng kết quả truy vấn có khả năng cực kỳ lớn.
THUYDUONGCD có tài liệu nào nói rõ hơn về vụ này không, xem ra cái này mình cũng mơ hồ thế nào ấy hoặc ít nhất cũng phải query thật lớn thì mới thấy được hiệu quả của nó chứ mấy câu query máy ngàn record thì làm sao nhận thấy nó chậm hay nó nhanh được
thuyduongcd viết 12:58 ngày 10/10/2018
Trong tài liệu về hàm mysql_free_result() của php.net có nói rõ về vấn đề này mà
lovestormknx viết 13:04 ngày 10/10/2018
Nguyên văn ở đây bác:

mysql_free_result() only needs to be called if you are concerned about how much memory is being used for queries that return large result sets. All associated result memory is automatically freed at the end of the script's execution.
hoanghon2005 viết 12:52 ngày 10/10/2018
Woww đi một ngày đàng học một sàng khôn

vậy là khi mình query với số lượng record thật lớn mới nên dùng free_sult còn lạm dụng nó quá sẽ phản tác dụng

thanks thanks nhìu nhìu nhe
Bài liên quan
0