>백엔드 개발 >C++ >C에서 최적의 파일 쓰기 성능을 달성하는 방법은 무엇입니까?

C에서 최적의 파일 쓰기 성능을 달성하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 14:22:23573검색

How to Achieve Optimal File Writing Performance in C  ?

C에서 파일 쓰기 성능을 높이는 방법

방대한 데이터를 바이너리 파일에 쓸 때는 성능 최적화가 중요합니다. 쓰기 속도를 높이는 방법은 다음과 같습니다.

직접 파일 처리를 위해 FILE* 활용:

예제 코드에서 FILE*을 사용하면 우회하여 직접 파일 액세스가 가능합니다. 중간 레이어 및 오버헤드 감소. 이 접근 방식은 원래 질문에서 볼 수 있듯이 상당한 성능 향상을 가져옵니다.

FILE* 사용법에 대한 코드 최적화:

#include <stdio.h&gt ;<br>const unsigned long long 크기 = 8ULL<em>1024ULL</em>1024ULL;<br>unsigned long long a[크기];</p><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 <벡터></h1>
<h1>포함 <cstdint></h1>
<h1>포함 <숫자></h1>
<h1>포함 <무작위></h1>
<h1>포함 <알고리즘></h1>
<h1>포함 <iostream></h1>
<h1>포함 <cassert></h1>
<p>long long 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으로 문의하세요.