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?
Einen Kommentar schreiben: