C에서 파일 쓰기 성능을 높이는 방법
방대한 데이터를 바이너리 파일에 쓸 때는 성능 최적화가 중요합니다. 쓰기 속도를 높이는 방법은 다음과 같습니다.
직접 파일 처리를 위해 FILE* 활용:
예제 코드에서 FILE*을 사용하면 우회하여 직접 파일 액세스가 가능합니다. 중간 레이어 및 오버헤드 감소. 이 접근 방식은 원래 질문에서 볼 수 있듯이 상당한 성능 향상을 가져옵니다.
FILE* 사용법에 대한 코드 최적화:
#include <stdio.h> ;<br>const unsigned long long 크기 = 8ULL<em>1024ULL</em>1024ULL;<br>unsigned long long a[크기];</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>
이 최적화된 코드는 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> <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)
{
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!