Beispiel #1
0
        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());
                }
        }