ID: 31515 User updated by: akorthaus at web dot de Reported By: akorthaus at web dot de Status: Open Bug Type: Performance problem Operating System: Linux 2.4.28 (Gentoo) PHP Version: 5.0.3 New Comment:
I tried php5-STABLE-200501140930 with the same result The size of the directory-listing ("files"): number of files: ls -1 files | wc -l 10000 Number of bytes: ls -1 files | wc -c 330000 Previous Comments: ------------------------------------------------------------------------ [2005-01-13 03:43:06] akorthaus at web dot de the same with php5-STABLE-200501130130 ------------------------------------------------------------------------ [2005-01-13 03:09:46] akorthaus at web dot de I tried php5-STABLE-200501122330: ./configure \ --prefix=/home/akorthaus/bin/php5-STABLE-200501122330 \ --disable-all \ --with-pcre-regex \ --enable-memory-limit With the following results: scandir (foreach:500, files:527) mem: 2M time: 10.242558956146s my_scandir (foreach:500, files:527) mem: 0M time: 2.3772580623627s scandir (foreach:1, files:10000) mem: 40M time: 0.40674495697021s my_scandir (foreach:1, files:10000) mem: 1M time: 0.17293095588684s scandir (foreach:100, files:10000) mem: 40M time: 41.659919977188s my_scandir (foreach:100, files:10000) mem: 1M time: 20.631703853607s ------------------------------------------------------------------------ [2005-01-13 02:10:35] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.0-win32-latest.zip That's amazing. Try 5.0.4-dev. ------------------------------------------------------------------------ [2005-01-12 23:59:15] akorthaus at web dot de With a small directory I get: my_scandir: count: 71 1.63159513474 scandir: count: 71 3.12091302872 With 100.000 files it takes too long, and scandir() runs into memory_limit (which is 500 MB!) scandir() seems to need much more memory! I added the following line to the scripts: echo "mem: ".number_format(memory_get_usage()/1048576) . "M\n"; so I get: my_scandir: mem: 10M count: 100002 1.38867807388 scandir: mem: 397M count: 100002 1.75003910065 If I put in (scandir version): foreach(range(1, 2) as $unused) I get: Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 4096 bytes) in /home/akorthaus/test/scan.php on line 5 If I put in (my_scandir version): foreach(range(1, 10) as $unused) mem: 10M count: 100002 16.7273759842 which is the same as with only one cycle. ------------------------------------------------------------------------ [2005-01-12 21:51:42] [EMAIL PROTECTED] count: 2034 251.505897045 count: 2034 155.706785917 Only difference: foreach(range(1, 5000) as $unused) $files = scandir('C:\WINDOWS\System32'); So, not on Win32. Do a foreach like I have done and spread the function call over quite a few calls, because with repeated execution of a single function call, it went back and forth for me. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/31515 -- Edit this bug report at http://bugs.php.net/?id=31515&edit=1