fwrite wird immer langsamer

Hallo,

ich möchte Daten aus einer mysql-Tabelle in eine Textdatei wegschreiben.
Das funktioniert an sich ganz gut, aber wenn die Datenmenge zu gross
ist, wird fwrite() immer langsamer. die ersten 5000 Sätze werden noch in
knapp 2 Sekunden geschrieben, die nächsten brauchen schon fast 5, und
die nächsten schon über 10. Sind in der Abfrage aber mal 50000 und mehr
drin, wird das 1. unerträglich und 2. komme ich in ein Timeout-Problem.

Was ich mache ist (in Auszügen):
....
$exp = mysql_query($sql);
if ($f = fopen ($tempdat, 'w')) {
$zaehler = 0;
$text = "";
while ($r = mysql_fetch_row($exp)) {

$r[1] = function1($r[1]);
$r[2] = function1($r[2]);
$r[5] = function2($r[5]);
$r[6] = function2($r[6]);

$text .= implode(';', $r)."\r\n";

$zaehler++;
if ($zaehler > 2000) {
$zaehler = 0;
fwrite($f, $text, strlen($text) );
$text = "";
}
}
fclose ($f);

} else {
echo "Datei konnte nicht geöffnet werden";
}

Hatte zuerst ein fwrite() für jeden Datensatz, dann (script oben) nur
alle 2000 Datensätze. Dann auch schon probiert die Datei zwischendrin
mal zu schließen. Dann die Umwandlungsfunktionen functio1 und function2
rausgelassen.
Es bleibt immer beim selben Verhalten (die Änderungen wirken sich aus,
aber nicht großartig) - die Geschwindigkeit geht in den Keller.

Was kann ich da verbessern?

Danke
Fabian
Fabian Knauf [ Mi, 26 September 2007 19:08 ] [ ID #1829929 ]

Re: fwrite wird immer langsamer

> Was kann ich da verbessern?
Ich bin inzwischen weiter: Ursache war, dass ich zwischendrin als
User-Info eine Ausgabe-Funktion in Form eines Laufbalkens hatte. Wird
diese in zu kurzen Abständen aktualisiert steigt die CPU-Auslastung des
Browsers auf bis zu 50% und das macht das Script langsamer.

Leider kommt jetzt aber das nächste Problem: das Script hört einfach
mittendrin auf - aber dazu fange ich einen neuen Thread 'was stoppt das
script?' an

Danke
Fabian
Fabian Knauf [ Mi, 26 September 2007 21:54 ] [ ID #1829936 ]
PHP » de.comp.lang.php.misc » fwrite wird immer langsamer

Vorheriges Thema: Elegante Möglichkeit das Problem der fehlenden Mehrfachvererbung zu umgehen
Nächstes Thema: umfangreichere OO-Programmierung