Doing more performance tests for directory traversal I ran into a performance issue with [NSURL contentsOfDirectoryAtURL:]:
See this typical code for scanning a directory: NSArray *contentURLs = [fileMgr contentsOfDirectoryAtURL:parentURL includingPropertiesForKeys:nil options:0 error:nil]; for (NSURL *url in contentURLs) { id value; [url getResourceValue:&value forKey:NSURLVolumeIdentifierKey error:nil]; I would have expected the call for fetching NSURLVolumeIdentifierKey to be rather fast because the upper file system layer should know which volume this belong to because it has to know which FS driver it has to pass the calls to. I.e., asking for the volume ID should be much faster than fetching actual directory data such as the file size, for instance. However, it turns out that this is just as slow as getting actual data from the lower levels. Could it be that the call is not optimized for returning this information as earlier as possible but that it passes the call down to the lowest level regardless of need? I mention this because it degrades the performance of a recursive directory scan significantly in my tests (on both APFS and HFS) - by more than 30%! The only thing even slower would be to call stat() instead (for getting the st_dev value). Is this worth having looked at? If so, should I report this via bugreporter (though, when I'm then asked to provide a system profiler report then, it's not going anywhere)? Thomas
_______________________________________________ Do not post admin requests to the list. They will be ignored. Filesystem-dev mailing list (Filesystem-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/filesystem-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com