У меня большой файл размером примерно 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
byte [8] - это 64-разрядное число, представляющее период времени, представленный галочками .NET. Мне нужно отсортировать этот файл, но я не могу найти самый быстрый способ сделать это.
В настоящее время я загружаю тики в структуру, а начальные и конечные позиции байта [n] и читаю до конца файла. После этого я сортирую список в памяти по свойству Ticks, а затем открываю BinaryReader и ищу каждую позицию в порядке тиков, считываю значение байта [n] и записываю во внешний файл.
В конце процесса я получаю отсортированный двоичный файл, но это занимает НАВСЕГДА. Я использую C # .NET и довольно крутой сервер, но кажется, что проблема с дисковым вводом-выводом.
Характеристики сервера:
- 2x 2,6 ГГц Intel Xeon (Hex-Core с HT) (24 потока)
- 32 ГБ ОЗУ
- 500 ГБ RAID 1 + 0
- 2 ТБ RAID 5
Я просмотрел весь интернет и могу найти только примеры, когда огромный файл размером 1 ГБ (заставляет меня смеяться).
У кого-нибудь есть совет?