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> ;<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;
}
< /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*)&data[0], bytes); myfile.close(); auto endTime = std::chrono::high_resolution_clock::now(); return std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
}
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(&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();
}
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!