Heim > Backend-Entwicklung > C++ > Wie erreicht man eine optimale Leistung beim Schreiben von Dateien in C?

Wie erreicht man eine optimale Leistung beim Schreiben von Dateien in C?

Mary-Kate Olsen
Freigeben: 2024-12-11 14:22:23
Original
573 Leute haben es durchsucht

How to Achieve Optimal File Writing Performance in C  ?

So verbessern Sie die Leistung beim Schreiben von Dateien in C

Beim Schreiben umfangreicher Daten in eine Binärdatei ist die Optimierung der Leistung von entscheidender Bedeutung. So erhöhen Sie Ihre Schreibgeschwindigkeit:

Verwenden von FILE* für die direkte Dateiverwaltung:

Im Beispielcode ermöglicht die Verwendung von FILE* den direkten Dateizugriff unter Umgehung Zwischenschichten und Reduzierung des Overheads. Dieser Ansatz führt zu erheblichen Leistungssteigerungen, wie in der ursprünglichen Frage beobachtet.

Codeoptimierung für die Verwendung von FILE*:

#include <stdio.h&gt ;<br>const unsigned long long size = 8ULL<em>1024ULL</em>1024ULL;<br>unsigned long long a[size];</p><p>int main()<br>{</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">FILE* pFile;
pFile = fopen("file.binary", "wb");
for (unsigned long long j = 0; j < 1024; ++j){
    // Some calculations to fill a[]
    fwrite(a, 1, size*sizeof(unsigned long long), pFile);
}
fclose(pFile);
return 0;
Nach dem Login kopieren

}
< /pre>

Dieser optimierte Code nutzt FILE* direkt, um in die Binärdatei zu schreiben Datei, wodurch schnellere Schreibgeschwindigkeiten erreicht werden.

Vergleich der Ansätze:

Neueste Messungen zeigen, dass std::fstream beim Schreiben großer Dateien eine vergleichbare Leistung wie FILE* bietet. Hier ein Vergleich verschiedener Ansätze:

#include <fstream></p>
<h1>include <chrono></h1>
<h1>include <vector></h1>
<h1>einschließen <cstdint></h1>
<h1>include <numeric></h1>
<h1>include <random></h1>
<h1>include <algorithm></h1>
<h1>include <iostream></h1>
<h1>einschließen <cassert></h1>
<p>long long option_1(std::size_t bytes)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// Using std::fstream
std::vector<uint64_t> data = GenerateData(bytes);
auto startTime = std::chrono::high_resolution_clock::now();
auto myfile = std::fstream("file.binary", std::ios::out | std::ios::binary);
myfile.write((char*)&amp;data[0], bytes);
myfile.close();
auto endTime = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
Nach dem Login kopieren

}

long long option_2(std::size_t bytes) Bytes)
{

// Using FILE*
std::vector<uint64_t> data = GenerateData(bytes);
auto startTime = std::chrono::high_resolution_clock::now();
FILE* file = fopen("file.binary", "wb");
fwrite(&amp;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();
Nach dem Login kopieren

}

Messungen zeigen, dass sowohl Option_1 (std::fstream) als auch Option_2 (FILE*) eine vergleichbare Leistung erzielen für große Datei Schreiben.

Fazit:

Zum Schreiben großer Puffer in eine Binärdatei in C bieten sowohl FILE* als auch std::fstream eine hohe Leistung. Die Wahl zwischen beiden hängt von den spezifischen Anforderungen und Vorlieben ab.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine optimale Leistung beim Schreiben von Dateien in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Wie rufe ich Basisklassenkonstruktoren in C auf? Nächster Artikel:Wann sollte ich „const“ vs. „constexpr“ für Variablen verwenden?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage