Преглед на файлове

xzcat: Use BufferedFile for reading inputs

This improves the decompression time of `clang-15.0.7.src.tar.xz` from
41 seconds down to about 5 seconds.

The reason for this very significant improvement is that LZMA, the
underlying compression of XZ, fills its range decompressor one byte at a
time, causing a lot of overhead at the syscall barrier.
Tim Schumacher преди 2 години
родител
ревизия
3ec513ecf2
променени са 1 файла, в които са добавени 2 реда и са изтрити 1 реда
  1. 2 1
      Userland/Utilities/xzcat.cpp

+ 2 - 1
Userland/Utilities/xzcat.cpp

@@ -22,7 +22,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     args_parser.parse(arguments);
 
     auto file = TRY(Core::File::open_file_or_standard_stream(filename, Core::File::OpenMode::Read));
-    auto stream = TRY(Compress::XzDecompressor::create(move(file)));
+    auto buffered_file = TRY(Core::BufferedFile::create(move(file)));
+    auto stream = TRY(Compress::XzDecompressor::create(move(buffered_file)));
 
     // Arbitrarily chosen buffer size.
     Array<u8, 4096> buffer;