public Settings(string sourceFilename, string destinationFilename, CompressionMode mode, TechnologyMode technology) { SourceFilename = sourceFilename; DestinationFilename = destinationFilename; Mode = mode; Technology = technology; }
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 }); } }