Hallo,
ich habe folgendes Problem: Ich arbeite (wie ihr schon wisst) an einem PHPChat (wie immer, erspart bitte Diskussionen). Nun, es geht nun um den Speicherverbrauch. Einige werden wohl meinen letzten Thread noch kennen, in dem es um das Problem ging. Nun, ich konnte dies so weit eindämmen, dass sich der Speicherverbrauch nicht mehr so arg erhöht.
Nur leider besteht das Problem immer noch, der Speicher wird pro Sekunde erhöht (1 Sekunde ist der Timeout zur Abfrage in der Datenbank nach einer neuen MessageID / dem UserTimeout). Ich hab ein bisschen herumprobiert, und festgestellt, dass der Fehler wohl an meiner MySQL-Klasse liegt - nur hab ich keine Ahnung, wie ich das beheben kann & wie ich hier die Referenzen setzen muss.
Vielleicht etwas schräg und oversized (hab eben alles versucht), aber hier mal mein Ansatz:
Diese Funktion wird jede Sekunde im Script aufgerufen, um einmal die letzte Aktion des Users zu bestimmen.Durch Messungen im Script kann ich so den Speicher feststellen:
Hier stell ich einen stetigen Speicherzuwachs von 16 (Byte?) fest:
Nun, wenn ich in der oben genannten Funktion get_lastaction() den MySQL-Query rauslass und einfach eine Zahl oder variable zurückgeb, bleibt der Speicherverbrauch konstant - folglich liegt es an der MySQL-Klasse.
Ich weiß, die Funktionen sind nicht auskommentiert, und auch noch PHP4.. Bitte keine Kommentare dazu
Ich möchte nun wissen, wie muss ich meine Referenzen richtig setzen, sodass der Speicherverbrauch konstant bleibt?
ich habe folgendes Problem: Ich arbeite (wie ihr schon wisst) an einem PHPChat (wie immer, erspart bitte Diskussionen). Nun, es geht nun um den Speicherverbrauch. Einige werden wohl meinen letzten Thread noch kennen, in dem es um das Problem ging. Nun, ich konnte dies so weit eindämmen, dass sich der Speicherverbrauch nicht mehr so arg erhöht.
Nur leider besteht das Problem immer noch, der Speicher wird pro Sekunde erhöht (1 Sekunde ist der Timeout zur Abfrage in der Datenbank nach einer neuen MessageID / dem UserTimeout). Ich hab ein bisschen herumprobiert, und festgestellt, dass der Fehler wohl an meiner MySQL-Klasse liegt - nur hab ich keine Ahnung, wie ich das beheben kann & wie ich hier die Referenzen setzen muss.
Vielleicht etwas schräg und oversized (hab eben alles versucht), aber hier mal mein Ansatz:
PHP-Code:
<?php
function &get_lastaction($uid) {
$mysql = &$this -> connection;
$mysql -> fetch_query("SELECT chatlastaction FROM ".$this->tblprefix."user WHERE id='$uid'");
$__lastaction = &$mysql -> record['chatlastaction'];
$mysql -> free_result();
return $__lastaction;
$var = time() + 1;
return $var;
}
?>
PHP-Code:
<?php
fwrite($fp, "Usage 1: " . memory_get_usage() . "\r\n");
$lastaction = &$chat -> get_lastaction($user['id']);
if(time() - $lastaction >= 1200)
$noerror = false;
fwrite($fp, "Usage 2: " . memory_get_usage() . "\r\n");
?>
Usage 1: 672056
Usage 2: 672072
(...)
Usage 1: 672088
Usage 2: 672104
Usage 2: 672072
(...)
Usage 1: 672088
Usage 2: 672104
PHP-Code:
<?php
function &fetch_query($query) {
static $rec = array();
$this->query(&$query);
$rec = $this->search_query();
return $rec;
}
function &search_query() {
$this->record = mysql_fetch_array(&$this->query_id);
$this->row += 1;
$this->errno = mysql_errno();
$this->error = mysql_error();
$res = is_array(&$this->record);
if (!$res) {
mysql_free_result(&$this->query_id);
$this->query_id = 0;
}
return $res;
}
?>
Ich möchte nun wissen, wie muss ich meine Referenzen richtig setzen, sodass der Speicherverbrauch konstant bleibt?
Kommentar