- Notifications
You must be signed in to change notification settings - Fork5.1k
Reuse the throw away buffer in ZipHelper#69439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
ZipHelper.AdvanceToPosition was allocating a new temporary buffer every time through the loop while reading from the stream. Changing the code to reuse the same buffer through the loop.
ghost commentedMay 17, 2022
Tagging subscribers to this area: @dotnet/area-system-io-compression Issue DetailsZipHelper.AdvanceToPosition was allocating a new temporary buffer every time through the loop while reading from the stream. Changing the code to reuse the same buffer through the loop. BenchmarkCodeusingBenchmarkDotNet.Attributes;usingSystem.IO.Compression;namespaceBenchmark;[MemoryDiagnoser]publicclassZipArchiveBenchmark{[Benchmark]publicZipArchiveEntryReadZipContainingExtraFields(){ZipArchivearchive=new(newMemoryStream(s_Zip64Data));returnarchive.GetEntry("file.txt");}privatestaticreadonlybyte[]s_Zip64Data={// ===== Local file header signature 0x04034b500x50,0x4b,0x03,0x04,// version to extract 4.50x2d,0x00,// general purpose flags0x00,0x08,// 0000_1000 'for enhanced deflating'// Deflate0x08,0x00,// Last mod file time0x17,0x9b,// Last mod date0x6d,0x52,// CRC320x0c,0x7e,0x7f,0xd8,// compressed size0xff,0xff,0xff,0xff,// UNcompressed size0xff,0xff,0xff,0xff,// file name length0x08,0x00,// extra field length0x38,0x00,// filename0x66,0x69,0x6c,0x65,0x2e,0x74,0x78,0x74,// -----Zip64 extra field tag0x01,0x00,// size of extra field block0x10,0x00,// 8 byte Zip64 UNcompressed size, index 420x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 8 byte Zip64 compressed size, index 500x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ----- NTFS extra field tag0x0a,0x00,// size of extra field block0x20,0x00,// reserved0x00,0x00,0x00,0x00,// tag #10x01,0x00,// size of tag #10x18,0x00,// Mtime, CTime, Atime0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,// -------------// Data!0x2b,0x49,0x2d,0x2e,0x01,0x00,// -------- Central directory signature 0x02014b500x50,0x4b,0x01,0x02,// version made by 4.50x2d,0x00,// version to extract 4.50x2d,0x00,// general purpose flags0x00,0x08,// Deflate0x08,0x00,// Last mod file time0x17,0x9b,// Last mod date0x6d,0x52,// CRC320x0c,0x7e,0x7f,0xd8,// 4 byte compressed size, index 120 (-1 indicates refer to Zip64 extra field)0xff,0xff,0xff,0xff,// 4 byte UNcompressed size, index 124 (-1 indicates refer to Zip64 extra field)0xff,0xff,0xff,0xff,// file name length0x08,0x00,// extra field length0x08,0x04,// file comment length0x00,0x00,// disk number start (-1 indicates refer to Zip64 extra field)0x00,0x00,// internal file attributes0x00,0x00,// external file attributes0x00,0x00,0x00,0x00,// relative offset of local header (-1 indicates refer to Zip64 extra field)0x00,0x00,0x00,0x00,// file name0x66,0x69,0x6c,0x65,0x2e,0x74,0x78,0x74,// extra field, content similar to before0x01,0x00,0x1c,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x18,0x00,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,// A MADE-UP EXTRA FIELD THAT NEEDS TO BE SKIPPED0x07,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0x00,0x00,0x00,0x00,0x25,0x18,0xd7,0x01,0x01,0x00,0x18,0x00,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,0xa8,0xb1,0xf6,0x61,0x25,0x18,0xd7,0x01,// == 'end of zip64 central directory record' signature 0x06064b500x50,0x4b,0x06,0x06,// size0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// version made by, version needed0x2d,0x00,0x2d,0x00,// disk number, disk number with CD0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// total number of CD records0x01,0x00,0x00,0x00,// size of CD0x00,0x00,0x00,0x00,// offset of start of CD wrt starting disk0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// zip64 extensible data sector0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// == 'zip64 end of CD locator' signature 0x07064b500x50,0x4b,0x06,0x07,// number of disk with zip64 CD0x00,0x00,0x00,0x00,// relative offset of zip64 ECD0xa2,0x04,0x00,0x00,0x00,0x00,0x00,0x00,// total number of disks0x01,0x00,0x00,0x00,// == 'end of CD' signature 0x06054b500x50,0x4b,0x05,0x06,// disk number, disk number with CD (-1 indicates refer to Zip64 extra field)0x00,0x00,0x00,0x00,// total number of entries in CD on this disk, and overall (-1 indicates refer to Zip64 extra fields)0xff,0xff,0xff,0xff,// size of CD (-1 indicates refer to Zip64 extra field)0x7a,0x00,0x00,0x00,// offset of start of CD wrt start disk (-1 indicates refer to Zip64 extra field)0x64,0x00,0x00,0x00,// comment length0x00,0x00};} Results
|
src/libraries/System.IO.Compression/src/System/IO/Compression/ZipHelper.cs OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
src/libraries/System.IO.Compression/src/System/IO/Compression/ZipHelper.cs OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
src/libraries/System.IO.Compression/src/System/IO/Compression/ZipHelper.cs OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
ZipHelper.AdvanceToPosition was allocating a new temporary buffer every time through the loop while reading from the stream. Changing the code to reuse the same buffer through the loop.
Benchmark
Code
Results