> 백엔드 개발 > C++ > C에서 바이너리 파일에 대한 대용량 버퍼 쓰기를 어떻게 최적화할 수 있습니까?

C에서 바이너리 파일에 대한 대용량 버퍼 쓰기를 어떻게 최적화할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-21 08:18:17
원래의
291명이 탐색했습니다.

How Can I Optimize Writing Large Buffers to Binary Files in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿