示例#1
0
        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();
                }
            }
        }
示例#2
0
        public void Run()
        {
            OnStartProcessing?.Invoke(_dataSets.Count);

            _dataSets
            .AsParallel()
            .ForAll(Process);
        }
示例#3
0
        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();
                }
            }
        }