Hi All

I have code that iterate on directory tree (the recursive function)
addFolder.  I had profiled it (MSVC 6.5)
        Func          Func+Child           Hit
        Time   %         Time      %      Count  Function
---------------------------------------------------------
      28.780  43.2       31.818  47.8      567
boost::filesystem::is_directory(class boost::filesystem::path const &)
(operations_posix_windows.obj)
      10.136  15.2       22.666  34.0      151
boost::filesystem::directory_iterator::directory_iterator(class
boost::filesystem::path const &) (operations_posix_windows.obj)
       7.249  10.9        7.249  10.9      592 `anonymous
namespace'::find_next_file(void *,class boost::filesystem::path const
&,struct _WIN32_FIND_DATAA &) (operations_posix_windows.obj)
(operations_posix_windows.obj)

As you can see most of the time is spent in the is_directory function. I
know that (in Win32 - ::FindNextFileA  at least) the information for
"is_directory" can be fetched in the "::find_next_file". I suggest to add
m_is_directory attribute to the path class (initial value "unknown") and
have is_directory read from this attribute if possible. (For my application
the is_directory time is swamped by other things but for other directory
iterating applications this may be significant)

profiled function:

addFolder(const fs::path &folder) {
 if (!fs::is_directory(folder)) {
  throw std::domain_error("Folder "+ folder.native_file_string()  + " should
have been directory");
 };
 fs::directory_iterator begin(folder);
 for (fs::directory_iterator it = begin; it != fs::directory_iterator();
it++) {
  if  (fs::is_directory(*it)) {
   addFolder(*it);
  } else {
        //Do something
   }
  };

 };

Cheers
Daniel Yerushalmi




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to