Heim >Backend-Entwicklung >C++ >Wie kann ich die Schreibgeschwindigkeit von Binärdateien in C maximieren?

Wie kann ich die Schreibgeschwindigkeit von Binärdateien in C maximieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-15 00:31:12903Durchsuche

How Can I Maximize Binary File Write Speed in C  ?

Verbesserung der Datenübertragungsgeschwindigkeit beim Schreiben von Binärdateien in C

Einführung:

Das effiziente Schreiben großer Puffer in Binärdateien ist möglich oft entscheidend für leistungsempfindliche Anwendungen. In diesem Artikel gehen wir der Frage nach, wie dieser Prozess in C optimiert werden kann.

Anfangsansatz und Engpässe:

Der bereitgestellte Code scheint im Vergleich zur Datei unterdurchschnittlich zu sein Kopiervorgänge. Zu den möglichen Engpässen gehören:

  • Verwendung von fstream anstelle von FILE* (Standard-E/A) für binäre Schreibvorgänge
  • Ineffiziente Schreibschleife mit häufigen Systemaufrufen

Optimierte Lösung:

Ein wesentlich schnellerer Ansatz ist die Verwendung von FILE* und fwrite:

#include <stdio.h>

const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];

int main()
{
    FILE* pFile;
    pFile = fopen("file.binary", "wb");
    for (unsigned long long j = 0; j < 1024; ++j)
    {
        // Data generation
        fwrite(a, 1, size*sizeof(unsigned long long), pFile);
    }
    fclose(pFile);
    return 0;
}

Dieser Code erreichte Schreibgeschwindigkeiten von etwa 220 MB/s und näherte sich damit den Grenzen der SSD.

Weitere Verfeinerungen:

Um die Codeeffizienz weiter zu verbessern, können wir Folgendes implementieren:

  • Stream-Synchronisierung deaktivieren mit std::ios_base::sync_with_stdio(false)
  • Vektorisierte Datengenerierung mit std::vector und std::iota, std::shuffle und std::random_device
  • Zeitmessungen mit std ::chrono

Benchmarking und Ergebnisse:

Benchmarking des Codes auf verschiedenen Plattformen (Laptop und Desktop) mit unterschiedlichen Puffergrößen (1 MB–4 GB) ergab:

  • Auf beiden Plattformen übertraf fstream FILE* bei der Verwendung kleiner Puffer (1 MB), fiel jedoch bei größeren Puffern zurück.
  • fstream konnte die SSD-Bandbreite für große Puffer vollständig nutzen, wodurch der Leistungsvorteil beseitigt wurde von FILE*.

Schlussfolgerung:

Zusammenfassend lässt sich sagen, dass zum effizienten Schreiben großer Puffer in Binärdateien in C Folgendes berücksichtigt werden muss:

  • Verwenden von std::fstream für kleine Puffer
  • Verwenden von FILE* und fwrite für große Puffer
  • Std::ios-Stream-Synchronisierung deaktivieren
  • Optimierung der Datengenerierung und des Benchmarkings

Das obige ist der detaillierte Inhalt vonWie kann ich die Schreibgeschwindigkeit von Binärdateien in C maximieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn