Skip to content

ioaznnis/parallel-compressor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

parallel-compressor

Консольное приложение на C# для поблочного сжатия и распаковки файлов с помощью System.IO.Compression.GzipStream.

Для сжатия исходный файл делится на блоки одинакового размера (константа BufferSize). Каждый блок сжимается и записывается в выходной файл независимо от остальных блоков.

Программа эффективно распараллеливает и синхронизирует обработку блоков в многопроцессорной среде и умеет обрабатывать файлы, размер которых превышает объем доступной оперативной памяти.

Примечание: формат архива приближен к формату GZIP (https://tools.ietf.org/html/rfc1952#page-5), т.е. блоки GZIP записываются последовательно. Такой формат удается разархивировать, однако он не позволяет реализовать эффективную параллельную распаковку, так как размер блока неизвестен. И нет гарантии, что очередной блок поместится в оперативную память, но это можно побороть, если необходимо.

При работе с потоками используются только базовые классы и объекты синхронизации:

  • Thread
  • Manual/AutoResetEvent
  • Monitor, и оператор lock.
  • SemaphoreSlim

Управление программой ожидается в формате:
GZipTest.exe compress/decompress [имя исходного файла] [имя результирующего файла]

Однако так как это .net core, то пока приложение не опубликовано, то синтаксис немного отличается:

dotnet GZipTest.dll compress/decompress [имя исходного файла] [имя результирующего файла]

ToDo

  • Unit тесты
  • Возможность распаковки файлов любого размера.
    Желательно бы переписать SplitToChunk на фабрику потоков, и анализировать начало нового фрагмента при вызове метода Stream.Read.

About

Работа с Thread & GzipStream

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages