Große Puffer optimal in C in Binärdateien schreiben
Um große Datenmengen effizient in eine Binärdatei zu schreiben, ist das Vermeiden eine wichtige Überlegung Leistungsengpässe. Herkömmliche Ansätze, die std::fstream in C verwenden, stoßen aufgrund der zugrunde liegenden Dateiverarbeitungsmechanismen häufig auf Einschränkungen.
Lösung unter Verwendung von direktem Datei-I/O mit FILE
Eine überlegene Methode beinhaltet die Verwendung direkter Datei-E/A über das FILE-Objekt. Dieser direkte Ansatz umgeht bestimmte mit dem std::fstream-Objekt verbundene Overheads, was zu deutlich verbesserten Schreibgeschwindigkeiten führt. Durch die direkte Verwendung von fwrite können die Schreibvorgänge effizienter und mit geringerem Verarbeitungsaufwand erfolgen.
Codeoptimierung mit FILE
Der bereitgestellte Code demonstriert diese Optimierung:
#include <stdio.h> #include <chrono> #include <vector> std::vector<uint64_t> GenerateData(std::size_t bytes) { // Code for data generation omitted for brevity } long long option_2(std::size_t bytes) { std::vector<uint64_t> data = GenerateData(bytes); auto startTime = std::chrono::high_resolution_clock::now(); FILE* file = fopen("file.binary", "wb"); fwrite(&data[0], 1, bytes, file); fclose(file); auto endTime = std::chrono::high_resolution_clock::now(); return std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count(); }
Dieser optimierte Ansatz nutzt die direkte Datei-E/A von FILE, um schnellere Schreibgeschwindigkeiten zu erreichen, insbesondere bei großen Datenmengen Beträge.
Benchmarking und Vergleich
Leistungsvergleiche zwischen der Verwendung von std::fstream und FILE I/O zeigen, dass die direkte Datei-I/O den herkömmlichen Ansatz deutlich übertrifft. Das Schreiben von 4 GB Daten mit FILE I/O dauert beispielsweise etwa 130 Millisekunden, während die Verwendung von std::fstream im Durchschnitt etwa 240 Millisekunden dauert, was die Effizienzgewinne durch direktes I/O demonstriert.
Das obige ist der detaillierte Inhalt vonWie kann ich das Schreiben großer Puffer in Binärdateien in C optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!