производительность fwrite () значительно ниже емкости диска

У меня есть динамически распределенный массивstruct с 17 миллионами элементов. Чтобы сохранить его на диск, я пишу

fwrite(StructList, sizeof(Struct), NumStructs, FilePointer)

На более позднем этапе я прочитал его с эквивалентнымfread утверждение, то есть используяsizeof(Struct) и подсчетNumStructs, Я ожидаю, что результирующий файл будет около 3,5 ГБ (это все x64).

Можно ли вместо этого пройтиsizeof(Struct) * NumStructs как размер и1 как рассчитывать, чтобы ускорить это? Я почесал голову, почему операция записи может занятьминут на быстром компьютере с 32 ГБ ОЗУ (много кеша записи). Я запустил тесты самонаведения, и кэш достаточно агрессивен, поэтому обычно 400 МБ / с для первых 800 МБ - 1 ГБ. PerfMon показывает, что он потребляет 100% одного ядра во время fwrite.

Я видел вопросВот так что я спрашиваю, есть ли внутри fwrite какой-то цикл, который можно «обмануть», чтобы он шел быстрее, сказав ему написать 1 элемент размера n * s, а не n элементов размера s.

РЕДАКТИРОВАТЬ

Я запускал это дважды в режиме релиза и оба раза отказывался от ожидания. Затем я запустил его в режиме отладки, зная, что обычноfwrite операции занимают больше времени. Точный размер записываемых данных составляет 4 368 892 928 байт. Во всех трех случаях PerfMon показывает два всплеска активности записи на диск с интервалом около 30 секунд, после чего процессор переходит на 100% одного ядра. Файл на тот момент 73 924 608 байт. У меня есть точки останова по обе стороны отfwrite так что я знаю, где он сидит. Кажется, что-то застряло, но я оставлю это работать на ночь и посмотрю.

РЕДАКТИРОВАТЬ

Оставил это на ночь, и он определенно зависfwriteФайл никогда не превышал 70 МБ.