在C 中以最佳方式將大型緩衝區寫入二進位檔案
為了有效地將大量資料寫入二進位文件,一個關鍵的考慮因素是避免效能瓶頸。由於底層檔案處理機制,在 C 中使用 std::fstream 的傳統方法經常會遇到限制。
利用 FILE 直接檔案 I/O 的解決方案
一種更好的方法涉及透過 FILE 物件使用直接檔案 I/O。這種直接方法繞過了與 std::fstream 物件相關的某些開銷,從而顯著提高了寫入速度。透過直接利用 fwrite,寫入操作可以更有效地進行並減少處理開銷。
使用FILE 進行程式碼最佳化
提供的程式碼示範了此最佳化:
#include <stdio.h> #include <chrono> #include <vector> std::vector<uint64_t> GenerateData(std::size_t bytes) { // Code for data generation omitted for brevity } long long option_2(std::size_t bytes) { 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(); }
這種最佳化方法利用FILE 提供的直接檔案I/O來實現更快的寫入速度,特別是對於大數據
基準測試和比較
使用std::fstream 和FILE I/O 之間的效能比較表明,直接文件I/O 明顯優於傳統方法。例如,使用 FILE I/O 寫入 4GB 資料大約需要 130 毫秒,而使用 std::fstream 平均大約需要 240 毫秒,這證明了直接 I/O 提供的效率提升。
以上是如何優化用 C 語言將大緩衝區寫入二進位檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!