Große Puffer in Binärdateien in C schreiben: Leistung optimieren
Die ursprüngliche Frage:
Beim Versuch, große Datenmengen (80 GB) auf eine SSD zu schreiben, erreichte der bereitgestellte C-Code mit std::fstream Geschwindigkeiten von ca. 20 MB/s, deutlich langsamer als die erwarteten Übertragungsraten einer SSD. Die Frage sucht nach Methoden zur Optimierung des Schreibprozesses.
Die Lösung:
Option 1: Verwendung von std::fstream mit sync_with_stdio(false)
Dieser Ansatz verwendet std::fstream mit dem Flag sync_with_stdio(false), Dadurch wird die Synchronisierung zwischen C- und C-E/A-Streams deaktiviert. Durch die Entkopplung der Streams wird die Leistung auf einigen Systemen verbessert, indem der Aufwand für Formatierung und Leeren von Daten reduziert wird.
Option 2: Nutzung von C-Standard-E/A-Funktionen
Dies Die Option verwendet Low-Level-C-Standard-E/A-Funktionen (fopen, fwrite und fclose) zum Schreiben von Daten in die Binärdatei. C I/O arbeitet auf einer niedrigeren Ebene als std::fstream und bietet eine bessere Kontrolle über Dateivorgänge und möglicherweise eine höhere Leistung.
Aktualisierte Messungen:
Zur Bestimmung der Wirksamkeit Für jeden Ansatz in aktuellen Szenarien wurden überarbeitete Codes und Messungen durchgeführt 2017:
Code:
Der aktualisierte Code verwendet fortschrittlichere Techniken wie Datengenerierung, Synchronisierung mit der hochauflösenden Uhr und flexible Puffergrößenmanipulation.
Ergebnisse:
Die Messungen ergaben, dass sowohl Option 1 (mit std::fstream mit sync_with_stdio(false)) und Option 3 (mit C-Standard-I/O-Funktionen) nutzten die Schreibfähigkeiten der SSD vollständig aus und erreichten ähnliche Schreibgeschwindigkeiten.
Fazit:
Der beste Ansatz zum Schreiben großer Puffer in Binärdateien in C hängt von bestimmten Hardware- und Softwarekonfigurationen ab. Im Allgemeinen bieten std::fstream mit sync_with_stdio(false) und C-Standard-E/A-Funktionen eine effiziente Leistung. Durch die Beseitigung von Engpässen ermöglichen diese Techniken eine optimierte und schnelle Datenübertragung auf SSDs.
Das obige ist der detaillierte Inhalt vonWie kann ich das Schreiben von C-Binärdateien für maximale SSD-Leistung optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!