我正在寻找一种快速的方法来创建一个包含许多小文件(例如25.4 MB,8个目录和4505个文件(的目录的.zip存档,但可能更大(。
当我使用标准7ZIP安装(通过上下文菜单(时,压缩需要1到2秒。
当我使用来自Sevenzipsharp库中的SevenzipCompressor在C#应用程序中进行相同操作时,它需要更长的时间(> 5秒(。现在,我想知道7ZIP使用的默认参数是什么?如何在代码中设置它们以达到相同的速度?
对于我的应用,压缩级别不如速度重要。
这是我的代码(我尝试了不同的压缩级别和模式,但没有显着差异(:
public Compressor()
{
var zipFile = @"pathTo7ZipDll7z.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);
}
原始目录的大小为26.678.577字节。
用C#代码创建的压缩.zip为25.786.743字节。
使用7ZIP安装创建的压缩.zip为25.771.350字节。
我还尝试使用BeginCompressDirectory
而不是CompressDirectory
,但这根本不起作用。它立即返回,没有发射事件,只会创建一个空存档。
将与您的代码生成的存档文件的大小与通过上下文菜单生成的代码的大小。在代码中需要更长的时间来产生一个较小的文件。另外,请确认您要获得的压缩比,因为目前尚不清楚原始文件的压缩程度。