C에서 최적으로 대용량 버퍼를 바이너리 파일에 쓰기
방대한 양의 데이터를 바이너리 파일에 효율적으로 쓰기 위해 고려해야 할 주요 사항은 다음을 피하는 것입니다. 성능 병목 현상. C에서 std::fstream을 사용하는 기존 접근 방식은 기본 파일 처리 메커니즘으로 인해 제한 사항에 직면하는 경우가 많습니다.
솔루션 Utilizing Direct File I/O with FILE
우수한 방법 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!