Example #1
0
 public Settings(string sourceFilename, string destinationFilename, CompressionMode mode, TechnologyMode technology)
 {
     SourceFilename      = sourceFilename;
     DestinationFilename = destinationFilename;
     Mode       = mode;
     Technology = technology;
 }
Example #2
0
        private static ITaskQueue <DataPortion> GetCompressingTaskQueue(TechnologyMode technology, int threadCount)
        {
            switch (technology)
            {
            case TechnologyMode.BlockingCollection:
                return(new TaskQueue <DataPortion>(threadCount));

            case TechnologyMode.Monitor:
                return(new TaskQueueMonitor <DataPortion>(threadCount));

            case TechnologyMode.Semaphore:
                return(new TaskQueueSemaphore <DataPortion>(threadCount));

            default:
                throw new ArgumentOutOfRangeException(nameof(technology), technology, null);
            }
        }
        private static void Decompress(string compressedFilename, string decompressedFilename,
                                       int threadCount, int blockSizeInMb, TechnologyMode technology)
        {
            using (var compressingTaskQueue = GetCompressingTaskQueue(technology, threadCount))
                using (var writeTaskQueue = GetWriteTaskQueue(technology, threadCount))
                {
                    var blockSize   = blockSizeInMb / 1024 - 10;
                    var coordinator = new Coordinator(threadCount, compressingTaskQueue, writeTaskQueue)
                    {
                        BlockSize = blockSize
                    };

                    var settingsProvider = new StubSettingsProvider(
                        new Settings(compressedFilename, decompressedFilename, CompressionMode.Decompress));

                    coordinator.Run(settingsProvider.GetSettings());
                }
        }
        private void InternalTest(int threadCount, int blockSizeInMb, int sourceFileSizeInMb, TechnologyMode technology)
        {
            var uniqueFilePart = $"{threadCount}${blockSizeInMb}${sourceFileSizeInMb}";

            var sourceFilename       = GetFullFilename($"source{uniqueFilePart}.file");
            var compressedFilename   = GetFullFilename($"compressed{uniqueFilePart}.gz");
            var decompressedFilename = GetFullFilename($"decompressed{uniqueFilePart}.file");

            GenerateSourceFile(sourceFilename, sourceFileSizeInMb);
            try
            {
                var watch = Stopwatch.StartNew();

                // Архивируем
                Compress(sourceFilename, compressedFilename, threadCount, blockSizeInMb, technology);

                watch.Stop();
                _testOutputHelper.WriteLine($"Архив: {watch.ElapsedMilliseconds} ms");

                watch.Restart();

                // Разархивируем
                Decompress(compressedFilename, decompressedFilename, threadCount, blockSizeInMb, technology);

                watch.Stop();
                _testOutputHelper.WriteLine($"Разар: {watch.ElapsedMilliseconds} ms");

                Validate(sourceFilename, decompressedFilename);
            }
            finally
            {
                RemoveTempFiles(new[] { sourceFilename, compressedFilename, decompressedFilename });
            }
        }