Exemplo n.º 1
0
        public void Compress(string input, string output, int chunkSize)
        {
            var chunksPool = new DataChunksPool();

            using (var readStream = new FileStream(input, FileMode.Open))
                using (var writeStream = new FileStream(output, FileMode.Create))
                {
                    var reader = new FixedSizeReader(readStream, chunkSize, chunksPool.Get);
                    var writer = new OrderedWriter(writeStream, new CompressedFormatter(), 10, chunksPool.Return);

                    var worker = new Worker(reader, writer, new DataChunkCompressProcessor(chunksPool.Get), chunksPool.Return);
                    worker.Process();
                }
        }
Exemplo n.º 2
0
        public Worker(
            IFileReader fileReader,
            OrderedWriter writer,
            IDataChunkProcessor processor,
            Action <DataChunk> freeChunk)
        {
            _prefetcher        = new Prefetcher(fileReader, 20, 5);
            _prefetcher.Ended += PrefetcherOnEnded;
            _writer            = writer;
            _processor         = processor;
            _freeChunk         = freeChunk;
            var threadsCount = Environment.ProcessorCount - 2;

            _workerThreads = new Thread[threadsCount];
            for (int i = 0; i < threadsCount; i++)
            {
                _workerThreads[i] = new Thread(ProcessInternal)
                {
                    IsBackground = true
                };
            }
        }