 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
Quber
Data înscrierii: 27/Iun/2006
Mesaje: 791
Locație: localhost
|
| Trimis: Lun Mai 12, 2008 8:01 am Titlul subiectului: Cum ar fi mai bine optimizat? |
|
|
Am o intrebare cum ar fi mai bine optimizat codul urmator:
Cod:
$result = mysql_query("SELECT * FROM tabel");
if (mysql_num_rows($result))
{
while ($obj = mysql_fetch_object($result))
{
// aici ce imi trebue mie...
}
unset($obj);
}
unset($result);
sau
Cod:
$result = mysql_query("SELECT * FROM tabel");
if (mysql_num_rows($result))
{
while ($obj = mysql_fetch_object($result))
{
// aici ce imi trebue mie...
}
unset($obj);
}
mysql_free_result($result);
unset($result);
Va rog sa argumentati..!
Multumesc Antitcipat..! |
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1421
Locație: Sibiu
|
| Trimis: Lun Mai 12, 2008 11:34 am Titlul subiectului: |
|
|
Uite aici codul optimizat:
<?
$result = mysql_query('SELECT * FROM tabel');
while ($obj = mysql_fetch_object($result)) {
// fa ceva
}
unset ($obj, $result);
// alt cod
?>
In conditiile in care //alt cod lipseste, poti sa renunti la unset(), intrucat variabilele respective sunt oricum marcate ca garbage la terminarea executiei scriptului.
Alte argumente:
1. mysql_fetch_object oricum returneaza false daca mysql_num_rows e 0, deci if(mysql_num_rows($result)) e redundant.
2. mysql_free_result nu e necesar decat daca urmeaza un query cu rezultate voluminoase imediat dupa alt query cu rezultate voluminoase. In conditiile in care faci doar un query si dupa aia termini executia e absolut inutil.
3. oricum la unset($result) rezultatul query-ului e marcat ca garbage, deci resursele ocupate de el devin disponibile, deci din nou, mysql_free_result e redundant
Cam atat. |
|
| Sus |
|
Quber
Data înscrierii: 27/Iun/2006
Mesaje: 791
Locație: localhost
|
| Trimis: Lun Mai 12, 2008 12:04 pm Titlul subiectului: |
|
|
| @mihaitha, multumesc mult.. o sa stiu deja cum sa fac... eu de obicei foloseam varianta intiea..! |
|
| Sus |
|
shoty
Data înscrierii: 05/Sep/2003
Mesaje: 1
Locație: turnu magurele
|
| Trimis: Joi Mai 15, 2008 12:05 pm Titlul subiectului: |
|
|
Din punct de vedere al memoriei utilizate, Rezultatul unui query ramane in memoria serverul de MySQL, iar eliberarea memoriei nu se face in momentul in care dai unset($result);
In php, $result este de fapt un int.
Daca vrei sa reduci cat mai mult consumul de memorie, recomand sa folosesti mysql_free_result($result). Deci varianta cea mai optimizata (parerea mea):
Cod:
<?
$result = mysql_query('SELECT * FROM tabel');
while ($obj = mysql_fetch_object($result)) {
// fa ceva
}
mysql_free_result($obj);
unset ($obj, $result);
// alt cod
?>
|
|
| Sus |
|
Quber
Data înscrierii: 27/Iun/2006
Mesaje: 791
Locație: localhost
|
| Trimis: Joi Mai 15, 2008 12:21 pm Titlul subiectului: |
|
|
@shoty, mi se pare ca ai vrut sa scrii:
Cod:
<?
$result = mysql_query('SELECT * FROM tabel');
while ($obj = mysql_fetch_object($result)) {
// fa ceva
}
mysql_free_result($result);
unset ($obj, $result);
// alt cod
?>
Mai sunt alte idei..? |
|
| Sus |
|
mihaitha
Data înscrierii: 04/Mai/2007
Mesaje: 1421
Locație: Sibiu
|
| Trimis: Lun Mai 19, 2008 10:57 am Titlul subiectului: |
|
|
Hate to burst your bubbles, shoty. Tocmai mi-am confirmat o banuiala prin intermediul unor teste: nici mysql_result, nici unset nu iti elibereaza memoria ci marcheaza resursele din memoria respectiva ca 'garbage', adica memorie ocupata dar disponibila pentru a fi scrisa cu alte date. In caz ca nu stiai, PHP dispune de un sistem de 'garbage collection', care face tocmai ce ti-am spus eu mai sus. Deci dupa cum am mai spus-o, mysql_free_result($result) e redundant in conditiile in care ai apelat unset($result).
P.S. am constatat ca script-ul propriu-zis, respectiv memoria ocupata la inceputul executiei, este mai mic daca folosim unset($result) decat daca folosim mysql_free_result($result). Deci concluzia logica ar fi ca si timpul de executie e mai mic. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|