如何增強 C 語言的檔案寫入效能
將大量資料寫入二進位檔案時,最佳化效能至關重要。以下是如何提高您的寫入速度:
利用FILE* 進行直接文件處理:
在範例程式碼中,使用FILE* 允許直接文件訪問,繞過中間層並減少開銷。正如原始問題中所觀察到的,這種方法帶來了顯著的效能提升。
FILE* 用法的程式碼最佳化:
#include <stdio.h> ;<br>const unsigned long long size = 8ULL<em>1024 </em>1024ULL;<br>unsigned long long a[size];<p>int main()<br>{</p> <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>
此最佳化程式碼利用FILE* 直接寫入二進位文件,實現更快的寫入速度。
方法比較:
最近的測量表明 std::fstream 提供了與 FILE 相當的性能* 用於大文件寫入。以下是不同方法的比較:
#include <fstream></p><h1>include <chrono></h1><h1>include <vector></h1><h1>包含<cstdint></h1><h1>包含<數字></h1><h1>包含<隨機></h1><h1>包含<演算法></h1><h1>包含<iostream></h1><h1>包含<cassert></h1><p>長長長option_1(std::size_t位元組)<br>{</p><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)
{
// 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();
}
測量結果顯示option_1 (std::fstream) 和option_2 (FILE*) 都實現了相當的性能對於大檔案結論:對於將大緩衝區寫入C 中的二進位文件,FILE* 和std::fstream 都提供高效能。兩者之間的選擇取決於具體要求和偏好。
以上是如何用C實現最佳的文件寫入效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!