Die Leistung von fwrite () liegt weit unter der Festplattenkapazität

Ich habe ein dynamisch zugewiesenes Array von astruct mit 17 Millionen Elementen. Um es auf die Festplatte zu speichern, schreibe ich

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

In einem späteren Schritt las ich es mit einem Äquivalentfread Anweisung, das heißt, mitsizeof(Struct) und eine Zählung vonNumStructs. Ich erwarte, dass die resultierende Datei ungefähr 3,5 GB groß sein wird (dies ist alles x64).

Ist es stattdessen möglich zu bestehensizeof(Struct) * NumStructs wie die Größe und1 als die Zählung, um dies zu beschleunigen? Ich kratzte mir am Kopf, warum der Schreibvorgang möglicherweise dauern könnteProtokoll auf einem schnellen Computer mit 32 GB RAM (viel Schreib-Cache). Ich habe selbstgebraute Benchmarks durchgeführt und der Cache ist aggressiv genug, dass 400 MB / s für die ersten 800 MB bis 1 GB typisch sind. PerfMon zeigt, dass es während des Schreibvorgangs 100% eines Kerns verbraucht.

Ich habe die Frage gesehenHier Ich frage also, ob es in fwrite eine Schleife gibt, die "ausgetrickst" werden kann, um schneller zu werden, indem man sie dazu auffordert, 1 Element der Größe n * s im Gegensatz zu n Elementen der Größe s zu schreiben.

BEARBEITEN

Ich habe dies zweimal im Release-Modus ausgeführt und beide Male das Warten aufgegeben. Dann habe ich es im Debug-Modus ausgeführtfwrite Operationen dauern viel länger. Die genaue Größe der zu schreibenden Daten beträgt 4.368.892.928 Bytes. In allen drei Fällen zeigt PerfMon im Abstand von etwa 30 Sekunden zwei Bursts von Festplattenschreibaktivitäten an, wonach die CPU auf 100% eines Kerns wechselt. Die Datei ist zu diesem Zeitpunkt 73.924.608 Bytes. Ich habe Haltepunkte auf beiden Seiten desfwrite Also weiß ich, dass es dort sitzt. Es scheint sicher, dass etwas feststeckt, aber ich werde es über Nacht laufen lassen und sehen.

BEARBEITEN

Habe dies über Nacht und es hing definitiv infwrite, die Datei hat 70 MB nicht überschritten.