Mailinglisten-Archive |
Norbert Pfeiffer schrieb: > Hallo, > > eine Textdatei mit 11 Mio Zeilen wird geoeffnet und zeilenweise eingelesen. > Dabei wird eine Schleife verwendet, die jeweils 99 Zeilen einliest, fuer > jede Zeile get_browser aufruft und das Ergebnis in ein Array schreibt: was ich probieren würde: > <?php > $OUT = array(); > $x = 0; > while(!feof($f0)) { > $agent = trim(fgets($f0, 333)); ^^ weglassen > $UA = get_browser($agent); $UA = get_browser($agent, true); > $BR = get_object_vars($UA); ^^ weglassen > $browser = $BR['browser']; ^^ weglassen > $n = (isset($OUT[$browser])) ? ($OUT[$browser] + 1) : 1; > $OUT[$browser] = $n; ^^ zusammenfassen > $x++; > echo ($x % 99 == 0) ? sprintf('% 11s', number_format($x,0,',','.')). ^^ 99 erhöhen > sprintf('% 7s', number_format(count($OUT),0,',','.'))."\n" : ''; > } > ?> > Leider braucht PHP dazu rund 2 sec pro Umlauf was auf eine > Gesamtverarbeitungszeit von rund 15,5 Stunden schliessen laesst. > > Wie bekommt man das auf ca. 1 Stunde runter ... ? <?php $OUT = array(); $x = 0; while(!feof($f0)) { // PHP 4 $UA = get_browser(fgets($f0, 333), true); $browser = $UA['browser']; // PHP 5 //$browser = get_browser(fgets($f0, 333))->browser; $OUT[$browser] = (isset($OUT[$browser])) ? ($OUT[$browser] + 1) : 1; $x++; echo ($x % 99 == 0) ? sprintf('% 11s', number_format($x,0,',','.')). sprintf('% 7s', number_format(count($OUT),0,',','.'))."\n" : ''; } ?> wie schnell ist denn get_browser()? eventuell das Ergebnis cachen: ... $agent = trim(fgets($f0, 333)); if (! isset($cache[$agent])) { $cache[$agent] = get_browser(fgets($f0, 333))->browser; } $OUT[$cache[$agent]] = (isset($OUT[$browser])) ? ($OUT[$browser] + 1) : 1; ...
php::bar PHP Wiki - Listenarchive