public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; var threadCount = Math.Max(1, Environment.ProcessorCount); #if DEBUG var technology = TechnologyMode.Semaphore; // Компрессия using (var compressingTaskQueue = GetCompressingTaskQueue(technology, threadCount)) using (var writeTaskQueue = GetWriteTaskQueue(technology, threadCount)) { var coordinator = new Coordinator(threadCount, compressingTaskQueue, writeTaskQueue); var watch = Stopwatch.StartNew(); var compressedSettingsProvider = new StubSettingsProvider( new Settings("data\\source.xml", "data\\compressed.gz", CompressionMode.Compress)); coordinator.Run(compressedSettingsProvider.GetSettings()); Console.WriteLine($"Время выполнения упаковки: {watch.ElapsedMilliseconds} мс"); } // Декомпрессия using (var compressingTaskQueue = GetCompressingTaskQueue(technology, threadCount)) using (var writeTaskQueue = GetWriteTaskQueue(technology, threadCount)) { var coordinator = new Coordinator(threadCount, compressingTaskQueue, writeTaskQueue); var watch = Stopwatch.StartNew(); var decompressedSettingsProvider = new StubSettingsProvider( new Settings("data\\compressed.gz", "data\\decompressed.xml", CompressionMode.Decompress)); coordinator.Run(decompressedSettingsProvider.GetSettings()); Console.WriteLine($"Время выполнения распаковки: {watch.ElapsedMilliseconds} мс"); } #else var settingsProvider = new SettingsProvider(args); var settings = settingsProvider.GetSettings(); var technology = settings.Technology; using (var compressingTaskQueue = GetCompressingTaskQueue(technology, threadCount)) using (var writeTaskQueue = GetWriteTaskQueue(technology, threadCount)) { var coordinator = new Coordinator(threadCount, compressingTaskQueue, writeTaskQueue); coordinator.Run(settings); } #endif Environment.Exit(0); }
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()); } }