Performance
OxiDex delivers exceptional performance improvements over the Perl-based ExifTool through zero-cost abstractions, parallel processing, and native compiled code.
Benchmark Results
The following benchmarks compare OxiDex against the original Perl ExifTool running on identical hardware.
Summary
| Scenario | Perl ExifTool | OxiDex | Speedup |
|---|---|---|---|
| Single JPEG Read | 116.5ms ± 15.6ms | 31.8ms ± 14.1ms | 3.7x faster |
| Batch Processing (1000 files) | 1911.4ms ± 171.9ms | 197.6ms ± 3.1ms | 9.7x faster |
| Write Operation | 200.7ms ± 50.4ms | 23.0ms ± 1.6ms | 8.7x faster |
| Format Detection | 67.3ms ± 13.9ms | 10.4ms ± 3.6ms | 6.5x faster |
Benchmark Metadata
- Date: 2025-12-10 04:28:14 UTC
- Commit:
0574128
System Specifications
- OS: Linux (Ubuntu 22.04)
- CPU: x86_64 (4 cores)
- Memory: 8GB RAM
- Perl ExifTool: latest version
- OxiDex: version 1.1.0
Live Benchmark Reports
View detailed interactive benchmark results from our CI/CD pipeline:
These reports are automatically generated by Criterion.rs on every commit to main and include:
- Performance graphs with statistical analysis
- Historical trend comparisons
- Outlier detection
- Detailed timing breakdowns
Key Performance Improvements
1. Single File Operations (3.7x faster)
Zero-cost abstractions and compiled code eliminate Perl interpreter overhead:
- No runtime interpretation
- Direct memory access
- Optimized binary parsing with
nom
2. Batch Processing (9.7x faster)
Parallel processing with Rayon leverages all CPU cores:
- Process 1000 files in 197.6ms vs 1911.4ms
- Linear scaling with CPU core count
- Efficient work stealing scheduler
3. Write Operations (8.7x faster)
Efficient binary manipulation and atomic file operations:
- In-place metadata updates
- Memory-mapped I/O with
memmap2 - Atomic file writes prevent corruption
4. Format Detection (6.5x faster)
Native compiled code dramatically outperforms interpreted Perl:
- Efficient magic byte matching
- Compile-time optimizations
- CPU cache-friendly algorithms
Reproducing Benchmarks
Comparative Benchmarks (vs Perl ExifTool)
Run the comparative benchmark suite:
# Install prerequisites
brew install hyperfine exiftool # macOS
# or
sudo apt install hyperfine libimage-exiftool-perl # Ubuntu
# Build OxiDex in release mode
cargo build --release
# Run comparison benchmarks
./benches/exiftool_comparison.sh
# View results
cat benches/benchmark_results.mdLibrary Micro-Benchmarks
Run detailed benchmarks for internal operations:
# Run all benchmarks
cargo bench
# Run specific benchmark
cargo bench format_detection
cargo bench jpeg_segment_parsing
cargo bench tiff_ifd_parsing
cargo bench full_read_metadataView HTML reports:
# macOS
open target/criterion/report/index.html
# Linux
xdg-open target/criterion/report/index.html
# Windows
start target/criterion/report/index.htmlProfiling
For detailed profiling information, see Profiling Guide.
Performance Tips
For Maximum Throughput
- Use batch processing: Process multiple files in one command for parallelism
- Extract specific tags only: Use
-TagNameto avoid parsing entire file - Binary output: Use
-bfor binary tag values (faster than formatting) - Disable verbose output: Use
-qfor quiet mode
Example: Fast Batch Extraction
# Extract just Make, Model, DateTimeOriginal from 10,000 JPEGs
oxidex -Make -Model -DateTimeOriginal -csv -r photos/ > metadata.csvOngoing Optimization
We continuously monitor and improve performance:
- Automated benchmarks on every commit
- Profiling with samply
- Flamegraph analysis
- Memory allocation tracking
See our optimization strategy for current focus areas.