У меня есть большой файл размером примерно 400 ГБ. Генерируется ежедневно внешней закрытой системой. Это двоичный файл следующего формата:
byte[8]byte[4]byte[n]
Где n равно значению int32 байта [4].
Этот файл не имеет разделителей, и чтобы прочитать весь файл, вы должны просто повторять до EOF. Каждый «элемент» представлен как байт [8] байт [4] байт [n].
Файл выглядит так, как будто
byte[8]byte[4]byte[n]byte[8]byte[4]byte[n]...EOF
байт [8] - это 64-битное число, представляющее период времени, представленный .NET Ticks. Мне нужно отсортировать этот файл, но я не могу найти самый быстрый способ сделать это.
В настоящее время я загружаю Ticks в структуру, в начальную и конечную позиции byte [n] и читаю до конца файла. После этого я сортирую список в памяти по свойству Ticks, а затем открываю BinaryReader и ищу каждую позицию в порядке Ticks, читаю значение byte [n] и записываю во внешний файл.
В конце процесса я получаю отсортированный двоичный файл, но это занимает НАВСЕГДА. Я использую C # .NET и довольно мощный сервер, но дисковый ввод-вывод кажется проблемой.
Характеристики сервера:
I ' Я поискал в Интернете и нашел только примеры, где огромный файл составляет 1 ГБ (заставляет меня смеяться).
Есть ли у кого-нибудь совет?