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

C에서 바이너리 파일 쓰기 속도를 어떻게 최대화할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 00:31:12906검색

How Can I Maximize Binary File Write Speed in C  ?

C에서 바이너리 파일 쓰기 시 데이터 전송 속도 향상

소개:

대용량 버퍼를 바이너리 파일에 효율적으로 쓰는 것은 성능에 민감한 애플리케이션에 중요한 경우가 많습니다. 이 기사에서는 C에서 이 프로세스를 최적화하는 방법에 대한 질문을 살펴보겠습니다.

초기 접근 방식 및 병목 현상:

제공된 코드는 파일에 비해 성능이 떨어지는 것으로 보입니다. 복사 작업. 잠재적인 병목 현상은 다음과 같습니다.

  • 바이너리 쓰기에 FILE*(표준 I/O) 대신 fstream 사용
  • 잦은 시스템 호출로 인한 비효율적인 쓰기 루프

최적화된 솔루션:

훨씬 더 빠른 접근 방식은 FILE* 및 fwrite 사용:

#include <stdio.h>

const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];

int main()
{
    FILE* pFile;
    pFile = fopen("file.binary", "wb");
    for (unsigned long long j = 0; j < 1024; ++j)
    {
        // Data generation
        fwrite(a, 1, size*sizeof(unsigned long long), pFile);
    }
    fclose(pFile);
    return 0;
}

이 코드는 SSD의 한계에 근접하는 약 220MB/s의 쓰기 속도를 달성했습니다.

추가 개선 사항:

코드 효율성을 더욱 향상시키기 위해 다음을 구현할 수 있습니다. 다음:

  • std::ios_base::sync_with_stdio(false)를 사용한 스트림 동기화 비활성화
  • std::Vector 및 std::iota, std::shuffle을 사용하여 벡터화된 데이터 생성, 및 std::random_device
  • 를 사용하여 시간 측정 std::chrono

벤치마킹 및 결과:

다양한 버퍼 크기(1MB-4GB)를 사용하여 다양한 플랫폼(노트북 및 데스크톱)에서 코드 벤치마킹 공개 :

  • 두 플랫폼 모두에서 작은 크기를 사용할 때 fstream이 FILE*보다 성능이 뛰어났습니다. 버퍼(1MB)이지만 더 큰 버퍼의 경우 뒤처집니다.
  • fstream은 큰 버퍼에 대해 SSD 대역폭을 완전히 활용할 수 있어 FILE*의 성능 이점을 제거했습니다.

결론 :

요약하자면, C에서 바이너리 파일에 대용량 버퍼를 효율적으로 쓰려면, 고려 사항:

  • 작은 버퍼에 std::fstream 사용
  • 대규모 버퍼에 FILE* 및 fwrite 사용
  • std::ios 스트림 동기화 비활성화
  • 데이터 생성 최적화 및 벤치마킹

위 내용은 C에서 바이너리 파일 쓰기 속도를 어떻게 최대화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.