Уважаемые StackOverflowers,
Я нахожусь в процессе написания приложения, которое сортирует огромное количество целых чисел из двоичного файла. Мне нужно сделать это как можно быстрее, и основной проблемой производительности является время доступа к диску, так как я выполняю множество операций чтения, это значительно замедляет алгоритм.
Стандартный способ сделать это - заполнить ~ 50% доступной памяти каким-либо буферизованным объектом (BufferedInputStream и т. Д.), А затем передать целые числа из буферизованного объекта в массив целых чисел (который занимает остальные свободного места) и отсортировать целые числа в массиве. Сохраните отсортированный блок обратно на диск, повторяйте процедуру, пока весь файл не будет разбит на отсортированные блоки, а затем объедините блоки вместе.
Стратегия сортировки блоков использует только 50% доступной памяти, поскольку данные по существу дублируются (50% для кеша и 50% для массива, пока они хранят одни и те же данные).
Я надеюсь, что смогу оптимизировать этот этап алгоритма (сортировку блоков), написав свой собственный буферизованный класс, который позволяет кэшировать данные прямо в массив int, чтобы массив мог занимать все свободное пространство, а не только На 50% это уменьшит число обращений к диску на этом этапе в 2 раза. Дело в том, что я не уверен, с чего начать.
EDIT:
По сути, я хотел бы найти способ заполнить массив целых чисел, выполнив только одно чтение файла. Другое ограничение - массив должен использовать большую часть свободной памяти.
Если какое-либо из сделанных мною утверждений неверно или, по крайней мере, кажется, поправьте меня,
любая помощь приветствуется,
Привет