Het zijn twee verschillende functies; fgets() leest per regel (tot de \n dus) en fread() leest een willekeurig aantal bytes in. Aangezien fgets() alles wat ie leest moet verwerken en fread() simpelweg een countertje ophoogt, is die laatste functie theoretisch het snelstquote:Op maandag 2 juli 2007 18:24 schreef Chandler het volgende:
Ik wilde graag weten wat is sneller.
fgets
fread
Heb zelf getest maar kon niet vinden welke nu echt sneller was
Klopt, maar zie graag de meest snelle methode om bv een 10KB bestand uit te lezen.. met een hoop enters..quote:Op maandag 2 juli 2007 19:04 schreef JeRa het volgende:
[..]
Het zijn twee verschillende functies; fgets() leest per regel (tot de \n dus) en fread() leest een willekeurig aantal bytes in. Aangezien fgets() alles wat ie leest moet verwerken en fread() simpelweg een countertje ophoogt, is die laatste functie theoretisch het snelst
Maar in de praktijk gebruik je ze dus voor verschillende doeleinden
quote:Op maandag 2 juli 2007 19:25 schreef Chandler het volgende:
[..]
Klopt, maar zie graag de meest snelle methode om bv een 10KB bestand uit te lezen.. met een hoop enters.. :D
1 2 3 | $data = file_get_contents('bestand.dat'); ?> |
Shame on youquote:Op maandag 2 juli 2007 19:30 schreef Chandler het volgende:
Ik draai nog PHP 4.2.1
PHP 4 >= 4.3.0, PHP 5
Geen idee ff benchmark bouwenquote:Op dinsdag 3 juli 2007 07:46 schreef Chandler het volgende:
maar zijn deze functies sneller dan fgets?
Het resultaat:quote:
De code die ik gebruikt heb:quote:wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 30.380990028381 seconds
Did 1000000 file_get_contents_fake2() in 34.327764987946 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 30.18455696106 seconds
Did 1000000 file_get_contents_fake2() in 33.193086862564 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 29.584892988205 seconds
Did 1000000 file_get_contents_fake2() in 36.115298986435 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 29.321064949036 seconds
Did 1000000 file_get_contents_fake2() in 32.658441066742 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 28.93373298645 seconds
Did 1000000 file_get_contents_fake2() in 34.299740076065 seconds
wyrihaximus@localhost:~>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | function file_get_contents_fake($file) { return implode('',file($file)); } $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake('/home/wyrihaximus/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time secondsn"; function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 16384); } fclose($fp); return $data; } $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake2('/home/wyrihaximus/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time secondsn"; ?> |
En het geheugengebruik?quote:Op dinsdag 3 juli 2007 08:12 schreef WyriHaximus het volgende:
[..]
Het resultaat:
[..]
De code die ik gebruikt heb:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 | { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 16384); } fclose($fp); return $data; } |
Hmm dat is toch tricky best om het echt netjes te doenquote:
Code:quote:76664 bytes
Did 1000000 file_get_contents_fake() in 26.938782930374 seconds: 79156 bytes
Did 1000000 file_get_contents_fake2() in 33.518908977509 seconds: 79688 bytes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
Ja moet wel: http://nl2.php.net/fread nu ff met filesize neer gezetquote:Op dinsdag 3 juli 2007 09:50 schreef Chandler het volgende:
en als je nu eens van
[ code verwijderd ]
de 16384 weghaalt, hier hoef je toch geen 'grootte' aan te koppelen? en anders eens gewoon op 1024 zet (meeste scripts bevatten toch niet langere regels dan 1024 chars)
1 2 3 4 5 6 7 8 9 10 11 12 13 | function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function file_get_contents_fake2($file) { $data = ''; // $xSize = filesize($file); $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } ?> |
quote:Op dinsdag 3 juli 2007 10:00 schreef Chandler het volgende:
Tip:
[ code verwijderd ]
veranderen in
[ code verwijderd ]
want waarom lees je steeds stukken uit die net zo groot zijn als 'het bestand zelf'?(ik doel nu even op tekst gebasseerde bestanden!
Scheelt wel iddquote:76476 bytes
Did 1000000 file_get_contents_fake() in 26.639196157455 seconds: 78992 bytes
Did 1000000 file_get_contents_fake2() in 29.833640098572 seconds: 79524 bytes
Deze keer ook file_get_contents() gedaan om goed te kunnen vergelijkenquote:80772 bytes
Did 100000 file_get_contents_fake() in 45.338598966599 seconds: 123716932 bytes
Did 100000 file_get_contents_fake2() in 23.763649940491 seconds: 938117048 bytes
Did 100000 file_get_contents() in 14.183950901031 seconds: 938117152 bytes
Doe eens een gokquote:Op dinsdag 3 juli 2007 10:50 schreef Chandler het volgende:
@WyriHaximus; wat zijn speties?
Helaas kan ik geen file_get_contents gebruikenmaaruh heb je de nieuwe source ook? even checken op mijn systeem... (heb mijn lappie mee naar m'n werk
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
Die laatste was al met datquote:Op dinsdag 3 juli 2007 10:57 schreef doka het volgende:
Scheelt nogal wat qua geheugen.
Zou je die laatste nog een keer kunnen doen? Maar dan met
$data .= fread($fp, 1024); in file_get_contents_fake2
Maar wat zijn speties nou????quote:Op dinsdag 3 juli 2007 11:00 schreef WyriHaximus het volgende:
Die laatste was al met dat. Zal ff fake3 ook maken
.
Spatiesquote:Op dinsdag 3 juli 2007 11:04 schreef Chandler het volgende:
[..]
Maar wat zijn speties nou????en ik wacht even je update af, kun je ook de pagina die jij gebruikt even linken? zodat ik dezelfde 'test' scripting heb?
Code:quote:87512 bytes
Did 100000 file_get_contents_fake() in 45.875488042831 seconds: 108920596 bytes
Did 100000 file_get_contents_fake2() in 22.202512979507 seconds: 923320712 bytes
Did 100000 file_get_contents_fake3() in 13.83746099472 seconds: 358186172 bytes
Did 100000 file_get_contents() in 13.45986199379 seconds: 358186220 bytes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } function file_get_contents_fake3($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake3('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake3() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |