Rust's recursive directory iterator 5x faster than CPP
Why is rust's WalkDir and jWalk much much faster (\~ 5x and \~7.5x respectively) than the CPP's recursive directory iterator?
System: M1 Max macbook pro
Test: Recursively iterate through all the directories recursively and count the number of files.
Total Files: 346,011
Results -
CPP - 4.473 secs
Rust (WalkDir) - 0.887 secs
Rust (jWalk) - 0.670 secs
Both compiled in release mode -
CPP: gcc ./src/main.cpp -o ./src/output.o -O3
RUST: cargo build --release
CPP code \~ 4.473 secs
#include <filesystem>
#include <iostream>
int main(int argc, char **argv) {
int count = 0;
for (auto &p : std::filesystem::recursive_directory_iterator("../../../")) {
count += 1;
}
std::cout << "Found " << count << " files" << std::endl;
}
RUST code (walkdir) \~ 0.887 secs
use walkdir::WalkDir;
fn main() {
let mut count = 0;
for _ in WalkDir::new("../../../").into_iter() {
count += 1;
}
println!("Found {} files", count);
}
RUST code (jWalk) \~ 0.67 secs
use jwalk::WalkDir;
fn main() {
let mut count = 0;
for _ in WalkDir::new("../../../").skip_hidden(false).into_iter() {
count += 1;
}
println!("Found {} files", count);
}
Is there any change you'd suggest for C++ part? I've made it as simple as possible.