11. juni 2009 - 22:27Der er
12 kommentarer og 1 løsning
Garbage collector, destructor m.m.
Hej
Jeg sidder med et problem med en database klasse der ikke rigtig virker efter hensigten.
Klassen har en constructor der åbner forbindelse og en destructor der lukker forbindelse. Problemet er at destructoren ikke rigtig bliver kaldt når jeg synes den skal :)
Hvis jeg f.eks. har:
<?php function test() { $db = new DB(); $db->do("SELECT * ...."); ... ... return true; }
while(1) { test(); } ?>
Så fejler scriptet, fordi der bliver lavet for mange samtidige forbindelser til databasen. Hvis jeg derimod sætter $db = null; før return, så virker det som det skal.
Kan det virkelig passe at garbagecollectoren ikke fjerner $db når den ryger "out of scope", altså når functionen returnere?
Det gør virkelig en forskel at bruge professionel hardware, hvad enten det er til videoproduktion, AI-udvikling eller High Performance Computing.
20. december 2024
Slettet bruger
11. juni 2009 - 22:37#1
Det kan godt ske, at PHP's garbage collector ikke fjerner objektet, så snart det bliver overflødiggjort og i stedet virker med forsinkelse - hvilket giver problemet med det voldsomt store antal forbindelser.
så hurtigt som muligt = lige så snart man er færdig med at bruge den connection
Synes godt om
Slettet bruger
12. juni 2009 - 11:47#7
Dvs. forbindelsen lukkes "øjeblikkeligt", når destructoren (og gennem den mysql_close) kaldes, så efterfølgende kode først afvikles, når forbindelsen med garanti er lukket? Jeg tillader mig lige at skære det ud i pap for mig selv :)
Synes godt om
Slettet bruger
12. juni 2009 - 11:49#8
Ups, jeg tror, jeg misforstod dig :) Man kalder mysql_close så hurtigt som muligt - men vil kaldet øjeblikkeligt lukke forbindelsen?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.