I am looking for a fast way to create a .zip archive of a directory that contains a lot of small files (e.g. 25.4 MB, 8 directories and 4505 files, but could be larger).
When I use the standard 7zip Installation (via context menu) the compression takes 1 to 2 seconds.
When I use the SevenZipCompressor from the SevenZipSharp library to do the same in a C# application, it takes way longer (> 5 seconds).
__Now I am wondering what are the default parameters used by 7zip (or how could I find out, which parameters 7zip actually uses) and how can I set them in my code to achieve the same speed?__
For my application, the compression level is not as important as the speed.
Here is my code (I tried different compression levels and modes, but with no significant differences):
```
public Compressor()
{
var zipFile = @"pathTo7ZipDll\7z.dll";
if (File.Exists(zipFile))
{
SevenZipBase.SetLibraryPath(zipFile);
}
else
{
throw new ApplicationException("seven zip dll file not found!");
}
Zipper = new SevenZipCompressor
{
ArchiveFormat = OutArchiveFormat.Zip,
DirectoryStructure = true,
PreserveDirectoryRoot = true,
CompressionLevel = CompressionLevel.Fast,
CompressionMethod = CompressionMethod.Deflate
};
Zipper.FileCompressionStarted += (s, e) =>
{
if (IsCancellationRequested)
{
e.Cancel = true;
}
};
Zipper.Compressing += (s, e) =>
{
if (IsCancellationRequested)
{
e.Cancel = true;
return;
}
if (e.PercentDone == 100)
{
OnFinished();
}
else
{
Console.WriteLine($"Progress received: {e.PercentDone}.");
}
};
Zipper.CompressionFinished += (s, e) =>
{
OnFinished();
};
}
private void OnFinished()
{
IsProcessing = false;
IsCancellationRequested = false;
}
public void StartCompression()
{
IsProcessing = true;
Zipper.CompressDirectory(InputDir, OutputFilePath);
}
```
The original directory has a size of 26.678.577 Bytes.
The compressed .zip created with the c# code is 25.786.743 Bytes.
The compression takes ~6167 ms.
The compressed .zip created with the 7zip installation is 25.771.350 Bytes.
When I use the standard 7zip Installation (via context menu) the compression takes 1 to 2 seconds.
When I use the SevenZipCompressor from the SevenZipSharp library to do the same in a C# application, it takes way longer (> 5 seconds).
__Now I am wondering what are the default parameters used by 7zip (or how could I find out, which parameters 7zip actually uses) and how can I set them in my code to achieve the same speed?__
For my application, the compression level is not as important as the speed.
Here is my code (I tried different compression levels and modes, but with no significant differences):
```
public Compressor()
{
var zipFile = @"pathTo7ZipDll\7z.dll";
if (File.Exists(zipFile))
{
SevenZipBase.SetLibraryPath(zipFile);
}
else
{
throw new ApplicationException("seven zip dll file not found!");
}
Zipper = new SevenZipCompressor
{
ArchiveFormat = OutArchiveFormat.Zip,
DirectoryStructure = true,
PreserveDirectoryRoot = true,
CompressionLevel = CompressionLevel.Fast,
CompressionMethod = CompressionMethod.Deflate
};
Zipper.FileCompressionStarted += (s, e) =>
{
if (IsCancellationRequested)
{
e.Cancel = true;
}
};
Zipper.Compressing += (s, e) =>
{
if (IsCancellationRequested)
{
e.Cancel = true;
return;
}
if (e.PercentDone == 100)
{
OnFinished();
}
else
{
Console.WriteLine($"Progress received: {e.PercentDone}.");
}
};
Zipper.CompressionFinished += (s, e) =>
{
OnFinished();
};
}
private void OnFinished()
{
IsProcessing = false;
IsCancellationRequested = false;
}
public void StartCompression()
{
IsProcessing = true;
Zipper.CompressDirectory(InputDir, OutputFilePath);
}
```
The original directory has a size of 26.678.577 Bytes.
The compressed .zip created with the c# code is 25.786.743 Bytes.
The compression takes ~6167 ms.
The compressed .zip created with the 7zip installation is 25.771.350 Bytes.