Моя задача - реорганизовать большой (~ 1 ГБ) двоичный файл. Мне нужно получить значения разных типов и записать их обратно в один большой файл, транспонированный. Исходный файл выглядит так (V означает значение)Как эффективно записывать данные в тысячи разных файлов
V1.1, V2.1, V3.1 ... VX.1, V1.2, V2.2, V3.2, ... VX.2 ... ... VX.Y
Выходной файл должен выглядеть следующим образом: V1.1, V1.2 ... V1.Y, V2.1, V2.2 ... VX. Y.
Что я делаю сейчас, чтобы открыть кучу временных файлов и записать все V1 в первую, все V2 в второй ... когда я через оригинальный файл я сцепить все временные файлы.
Мои ограничения являются:
- Память (то будет самое главное, 0 будет лучше) - Speed (моя задача состоит в том, чтобы сделать это как можно быстрее)
Моя задача сейчас: - При использовании Filestreams или FILE * Я ограничен 2048 файлами за процесс. В этом исходном файле может быть больше 2000 значений. - Использование CreateFile очень, очень медленно.
Как я читал данные: Я знаю, сколько значений в одном блоке (то есть: V1.1 - VX.1 -> X = 1000) Файл ввода является ifstream, где я прочитал данные в вектор байта, , тогда я записываю каждое значение в FILE * через fwrite(). Затем я прочитал следующий блок V1.2 - VX.2 и так далее ...
Мой вопрос теперь:
Есть ли способ, как правильно справиться с такой ситуацией? Я знаю, что у меня будет компромисс. Как я могу ускорить эту вещь, не набрав слишком большого объема памяти?
заранее спасибо, Nicolas
Edit: ОС Windows XP Embedded, .NET 4.0 Edit: Размер исходного файла ~ 1GB
Edit: Мой первый подход заключается в создании файла скелета и заполните его данными , используя fseek, но это было еще медленнее, чем мой текущий подход.
Редактировать: программа будет работать на жестком диске RAID-1.
Для такой проблемы разумно использовать подход, позволяющий использовать любые средства, зависящие от операционной системы, которые могут быть использованы. К сожалению, вы можете быть шокированы, узнав, что существует более одной операционной системы, которая используется на всех компьютерах в мире. Поэтому, не указав, какая платформа используется здесь, авторитарный ответ невозможен. –
Насколько велик «большой»? – molbdnilo
ОС - это окна, в деталях XP Embedded, .NET 4.0 –