Bug #51262 [Com]: RecursiveDirectoryIterator sucks performance

From: Date: Sun, 03 May 2020 05:09:29 +0000
Subject: Bug #51262 [Com]: RecursiveDirectoryIterator sucks performance
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-226888@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=51262&edit=1

 ID:                 51262
 Comment by:         bugreports at gmail dot com
 Reported by:        h dot reindl at thelounge dot net
 Summary:            RecursiveDirectoryIterator sucks performance
 Status:             No Feedback
 Type:               Bug
 Package:            SPL related
 Operating System:   win32 only
 PHP Version:        5.3.2
 Block user comment: N
 Private report:     N

 New Comment:

> The OP would have done well to try commenting out the entire body 
> of foreach to see if something in the body was slow

the OP is not an idiot that he removes something from a working example where you just need to
created many thousand files in many thousand folders

it's likely windows and iTäs braindead filesystem and caching which we no longer support
(way too much bordercase with damned backslahses here and there)

i would encourage the PHP project to do the same - there is no reason in 2020 with virtualization,
containers and WSL for the maintainance burden compared back in the days where the windows binaries
where the entry point for developers


Previous Comments:
------------------------------------------------------------------------
[2020-05-03 04:22:04] php-bugs at lists dot php dot net

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.

------------------------------------------------------------------------
[2020-04-22 07:36:45] requinix@php.net

Can anyone reproduce the behavior described in the report?

------------------------------------------------------------------------
[2020-04-22 07:32:19] alexinbeijing at gmail dot com

Don't have a Windows machine readily available or I would try this out.

The OP would have done well to try commenting out the entire body of foreach to see if
something in the body was slow, or whether it was just the process of iterating through the
directories and files.

------------------------------------------------------------------------
[2010-03-10 14:36:58] h dot reindl at thelounge dot net

Description:
------------
On Linux it is really easy to read recursive folder-listings with SPL even if there are many files
and folders, i need here between 1 and 3 seconds after cold start of the machine on my fedora-box

On Windows the same needs between 180 and 240 seconds and "process explorer" shows > 1
MB I/O the whole time, same script, same folders contents, same php-version

WHAT do you do on windows? 
Are you reading all the 30.000 files instead listing them only?

Test script:
---------------
<?php
$files    = array();
$folders  = array();
$spl_objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::CHILD_FIRST);
try
{
 foreach($spl_objects as $filename=>$spl_object)
 {
  if(DIRECTORY_SEPARATOR === "\\")
  {
   $filename = str_replace(DIRECTORY_SEPARATOR, '/', $filename);
  }
  if(substr($filename, 0, 2) === './')
  {
   $filename = substr($filename, 2);
  }
  switch($spl_object->isDir())
  {
   case false: $files[$filename] = $spl_object->getMTime(); break;
   case true:  $folders[] = $filename; break;
  }
 }
}
catch(UnexpectedValueException $e)
{
 error_log('Directory "' . $path . '" contained a directory we can not
recurse into');
 return false;
}
sort($folders);
ksort($files);
$enumerate_list = array('files'=>$files, 'folders'=>$folders);
unset($folders);
unset($files);
?>

Expected result:
----------------
a normal performance

Actual result:
--------------
waiting minutes to get hughe folder-listings


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=51262&edit=1


Thread (7 messages)

« previous php.bugs (#226888) next »