Ejemplo n.º 1
0
        public CsvColumnSorterBenchmark()
        {
            var column = 2;

            _unsortedRows      = new UnsortedRows();
            _stringSplitSorter = new CsvColumnSorter_StringSplit(column);
            _substringSorter   = new CsvColumnSorter_Substring(column);
            _spanSorter        = new CsvColumnSorter_Span(column);
        }
Ejemplo n.º 2
0
        public static async Task Main(string[] args)
        {
            var rows             = 10_000_000;
            var sourceFilename   = $"unsorted.{rows}.csv";
            var unsortedFilePath = Path.Combine(FileGenerator.FileLocation, sourceFilename);

            if (!File.Exists(unsortedFilePath))
            {
                System.Console.WriteLine($"{sourceFilename} does not exists, creating...");
                await FileGenerator.CreateFile(rows, FileGenerator.FileLocation);

                System.Console.WriteLine($"{sourceFilename} has been created");
            }

            var comparer = new CsvColumnSorter_Substring(2);
            var command  = new ExternalMergeSorter(new ExternalMergeSorterOptions
            {
                Sort = new ExternalMergeSortSortOptions
                {
                    Comparer = comparer
                }
            });
            var commandName = comparer.GetType().Name;
            var sourceFile  = File.OpenRead(Path.Combine(FileGenerator.FileLocation, sourceFilename));
            var targetFile  = File.OpenWrite(Path.Combine(FileGenerator.FileLocation, $"{commandName}.{rows}.csv".ToLower()));
            var stopwatch   = Stopwatch.StartNew();
            await command.Sort(sourceFile, targetFile, CancellationToken.None);

            stopwatch.Stop();
            System.Console.WriteLine($"{commandName} done, took {stopwatch.Elapsed}");

            //var splitFileProgressHandler = new Progress<double>(x =>
            //{
            //    var percentage = x * 100;
            //    System.Console.WriteLine($"Split progress: {percentage:##.##}%");
            //});
            //var sortFilesProgressHandler = new Progress<double>(x =>
            //{
            //    var percentage = x * 100;
            //    System.Console.WriteLine($"Sort progress: {percentage:##.##}%");
            //});
            //var mergeFilesProgressHandler = new Progress<double>(x =>
            //{
            //    var percentage = x * 100;
            //    System.Console.WriteLine($"Merge progress: {percentage:##.##}%");
            //});

            //var sortCommand = new ExternalMergeSorter(new ExternalMergeSorterOptions
            //{
            //    Split = new ExternalMergeSortSplitOptions
            //    {
            //        ProgressHandler = splitFileProgressHandler
            //    },
            //    Sort = new ExternalMergeSortSortOptions
            //    {
            //        ProgressHandler = sortFilesProgressHandler
            //    },
            //    Merge = new ExternalMergeSortMergeOptions
            //    {
            //        ProgressHandler = mergeFilesProgressHandler
            //    }
            //});

            //var sourceFile = Path.Combine(FileGenerator.FileLocation, sourceFilename);
            //var targetFile = File.OpenWrite(Path.Combine(FileGenerator.FileLocation, $"sorted.{rows}.csv"));
            //System.Console.WriteLine($"Starting to sort {sourceFilename}...");
            //var stopwatch = Stopwatch.StartNew();
            //await sortCommand.Sort(File.OpenRead(sourceFile), targetFile, CancellationToken.None);
            //stopwatch.Stop();
            //System.Console.WriteLine($"MergeSort done, took {stopwatch.Elapsed}");

            //System.Console.WriteLine("Starting to sort In-memory...");
            //stopwatch.Restart();
            //var unsortedRows = await File.ReadAllLinesAsync(unsortedFilePath);
            //Array.Sort(unsortedRows);
            //await File.WriteAllLinesAsync(Path.Combine(FileGenerator.FileLocation, "sorted.inmemory.csv"), unsortedRows);
            //stopwatch.Stop();
            //System.Console.WriteLine($"In-memory done, took {stopwatch.Elapsed}");
        }