public void Compress() { using (_inputStorage) { using (_compressor) { _fileSizeLeft = _inputStorage.GetFileByteSize(); int chunksCount = (int)Math.Ceiling(_fileSizeLeft / (double)ChunkByteSize); _resultFile.WriteChunksCount(chunksCount); _cdEvent = new CountdownEvent(chunksCount); ThreadHelper.RunThread(() => _resultFile.WriteChunks(_cdEvent)); OnStartProcessing?.Invoke(chunksCount); for (int i = 0; i < chunksCount; i++) { _compressor.AddChunk(ReadChunk(i)); _fileSizeLeft -= ChunkByteSize; } _cdEvent.Wait(); } } }
public void Run() { OnStartProcessing?.Invoke(_dataSets.Count); _dataSets .AsParallel() .ForAll(Process); }
public void Decompress() { using (_inputStorage) { using (_decompressor) { int chunkCount = _inputStorage.ReadInt(); _cdEvent = new CountdownEvent(chunkCount); ThreadHelper.RunThread(() => _resultFile.WriteChunks(_cdEvent)); OnStartProcessing?.Invoke(chunkCount); for (int i = 0; i < chunkCount; i++) { _decompressor.AddChunk(ReadChunk(i)); } _cdEvent.Wait(); } } }