Генерация тестового файла для сортировки
> filegen [имяфайла.ext] [размер_в_мегабайтах] [режим_генерации]
Например:
> filegen sample.txt 1024 M2
Все параметры позиционные и не обязательные
Имя файла по умолчанию: sample.txt
Размер в мегабайтах по умолчанию: 1024
Режим генерации по умолчанию: M2
Для генерации тестового файла используется список предложений sentences.txt (50 предложений)
Числовая часть записи - случайное число в диапазоне от 1 до 100000
M1 (FileGenM1.cs) - запись через StreamWriter (просто и медленно)
M2 (FileGenM2.cs) - генерация в буфер памяти (StringBuilder) и последующая запись
M3 (FileGenM3.cs) - генерация в буфер памяти (StringBuilder) и запись (параллельно)
M1 - 00:00:42.0692715
M2 - 00:00:02.8147587
M3 - 00:00:01.8521820
M1 - N/A
M2 - 00:00:37.9770485
M3 - 00:00:33.4934930
Сортировка текстового файла, в каждой строке которого запись вида "число. текст"
> filesort [имя_исходного_файла.ext] [имя_результирующего_файла.ext] [режим_сортировки]
Например:
> filesort sample.txt sorted.txt M1
Все параметры позиционные и не обязательные
Имя исходного файла по умолчанию: sample.txt
Имя результирующего файла по умолчанию: sorted.txt
Режим сортировки по умолчанию: M1
M1 (FileSorterM1.cs) - Чтение/сортировка/слияние. Чтение чанками по 1М записей (один поток), сортировка в памяти и запись во временное оглавление (4 потока), слияние (до 6-ти потоков). Не быстро, но без ограничения на входные данные.
M2 (FileSorterM2.cs) - Чтение и составление частотного словаря, генерация "отсортированного" файла по словарю. Используется то обстоятельство что в исходном файле большое количество повторений текстовой части записи, а числа находятся в диапазоне от 1 до 100000
M1 - 00:00:46.5659943
M2 - 00:00:08.6131212
M1 - 00:08:31.2478563
M2 - 00:01:40.1381780
Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
16.0 GB (15.9 GB usable)
SSD 512 GB