Я пишу консольное приложение для сжатия каталога больших файлов (около 30) с каждым файлом размером около 100-300 МБ, что будет выполняться один раз в день (по мере поступления новых файлов). Я попытался использовать встроенный класс GZipStream, и это заняло около 15 секунд на файл с коэффициентом сжатия около 0,212. Мне было интересно, есть ли более эффективный выход со сторонними библиотеками или есть какой-то способ увеличить степень сжатия. Наконец, есть ли возможность многопоточности ускорить этот процесс?
Вот код, который я сейчас использую (в основном это из статьи MSDN на GZipStream)
private void CompressFile(FileInfo fileInfo)
{
// Get the stream of the source file.
using (FileStream inFile = fileInfo.OpenRead())
{
Timer.Reset();
// Prevent compressing hidden and
// already compressed files.
if ((File.GetAttributes(fileInfo.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileInfo.Extension != ".gz")
{
// Create the compressed file.
using (FileStream outFile = File.Create(fileInfo.FullName + ".gz"))
{
using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
{
// Copy the source file into
// the compression stream.
Timer.Start();
inFile.CopyTo(Compress);
Timer.Stop();
Console.WriteLine("Compressed {0} from {1} to {2} bytes in {3} seconds.",
fileInfo.Name, fileInfo.Length.ToString(), outFile.Length.ToString(), ((double)Timer.ElapsedMilliseconds / 1000));
}
}
}
}
}
Спасибо!