首页 >后端开发 >C++ >如何用C实现最佳的文件写入性能?

如何用C实现最佳的文件写入性能?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 14:22:23575浏览

How to Achieve Optimal File Writing Performance in C  ?

如何增强 C 语言的文件写入性能

将大量数据写入二进制文件时,优化性能至关重要。以下是如何提高您的写入速度:

利用 FILE* 进行直接文件处理:

在示例代码中,使用 FILE* 允许直接文件访问,绕过中间层并减少开销。正如原始问题中所观察到的,这种方法带来了显着的性能提升。

FILE* 用法的代码优化:

#include <stdio.h> ;<br>const unsigned long long size = 8ULL<em>1024ULL</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><h1>include <chrono></chrono>
</h1>
<h1>include <vector></vector>
</h1>
<h1>包括 <cstdint></cstdint>
</h1>
<h1>包括</h1>
<h1>包括</h1>
<h1>包括</h1>
<h1>包括<iostream></iostream>
</h1>
<h1>包括<cassert></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*)&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();

}

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(&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();

}

测量结果表明 option_1 (std::fstream) 和 option_2 (FILE*) 都实现了相当的性能对于大文件

结论:

对于将大缓冲区写入 C 中的二进制文件,FILE* 和 std::fstream 都提供高性能。两者之间的选择取决于具体要求和偏好。

以上是如何用C实现最佳的文件写入性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn