Windows ReadFile 함수를 사용하여 FILE_FLAG_NO_BUFFERING을 사용하여 4GB 파일을 순차적으로 읽습니다. 나는 64K의 버퍼를 사용하고 있으며 모든 것이 올바르게 작동하지만 문제는 현재 버퍼의 끝과 다음 버퍼 사이에서 데이터가 잘리는 문제입니다. 예를 들어, 4 바이트 플로트 숫자 시퀀스가 있고 마지막 플로트에 도착하면 현재 버퍼에 3 바이트 만 있고 다음 바이트는 다음 읽기 버퍼에 저장됩니다. 그러면 어떻게 처리 할 수 있을까요? 마지막 3 바이트를 유지하고 다음 버퍼를 읽은 후 마지막 바이트를 추가하기 위해 소비 한 바이트 수를 추적해야합니까? 또는 버퍼를 다른 곳에 복사하고 거기에 수레 추적을 만들 수 있습니까? 그러나 이것은 Windows 캐시를 읽지 않는 이점을 꺾지는 못합니까? 어떤 도움을 주셔서 감사합니다.ReadFile FILE_FLAG_NO_BUFFERING 두 섹터간에 데이터를 읽는 방법
1
A
답변
0
경계에있는 특수한 경우에는 이전 블록의 비트와 다음 블록의 비트를 나란히두고 작은 스크래치 공간에 복사해야한다고 생각합니다. 한 조각으로. 경계에 있지 않으면이 스크래치 공간을 사용할 필요가 없습니다.
0
버퍼링되지 않은 읽기가 정렬되어야하기 때문에 직접 계산해야합니다.
하지만 더 나은 질문은 왜이 작업을 수행해야한다고 생각합니까? 파일을 읽으려고 std::ifstream
을 사용해 보셨습니까? 최신 프로세서와 캐시는 버퍼링 된 I/O가 수행한다고 생각되는 여분의 복사본을 숨기는쪽으로 (또는 사실상 제거하기 위해) 먼 길을 간다.
또한 순차적으로 읽는다면 FILE_FLAG_NO_BUFFERING
은 OS의 미리 읽기 기계를 금지합니다. 이렇게하면 OS 버퍼를 우회하는 것보다 훨씬 많은 비용이 들게됩니다.
가장 간단한 코드는 대용량 파일을 순차적으로 읽는 데 가장 잘 작동 할 것입니다. 이것은 현대 시스템이 모든 레벨에서 최적화 된 경우입니다 ...
관련 문제
- 1. URL 데이터를 읽는 방법
- 2. plist 데이터를 읽는 방법
- 3. 두 HTML 태그 사이의 데이터를 텍스트로 읽는 방법
- 4. XML 파일에서 데이터를 읽는 방법
- 5. 데이터베이스 이름없이 데이터를 읽는 방법
- 6. VHDL에서 rom_type의 데이터를 읽는 방법?
- 7. NHibernate : ISet에서 데이터를 읽는 방법
- 8. 파일에서 데이터를 저장하고 읽는 방법
- 9. cin을 두 번 읽는 방법?
- 10. PHP에서 @readfile?
- 11. SQL에서 부모 및 자식 데이터를 읽는 방법?
- 12. 텍스트 파일에서 데이터를 지속적으로 효율적으로 읽는 방법
- 13. AudioQueueBufferRef에서 데이터를 읽는 방법 -> mAudioData
- 14. URL에서 이미지 메타 데이터를 읽는 방법?
- 15. 게임 포트에서 파이썬으로 데이터를 읽는 방법?
- 16. 문자열로 변환하고 TCP 패킷에서 데이터를 읽는 방법
- 17. ListView 데이터를 일반 목록으로 읽는 방법
- 18. Flex를 사용하여 서버에서 XML 데이터를 읽는 방법?
- 19. swi prolog, txt.file의 데이터를 읽는 방법
- 20. Prolog에서 텍스트 파일의 데이터를 읽는 방법
- 21. Excel 스프레드 시트에서 데이터를 읽는 방법?
- 22. C++ : 동적 데이터를 구조체로 우아하게 읽는 방법?
- 23. 데이터베이스에 저장된 텍스트 파일에서 데이터를 읽는 방법
- 24. 데이터베이스에서 파워 포인트 슬라이드로 데이터를 읽는 방법?
- 25. 마운트 된 sdcard에 데이터를 쓰거나 읽는 방법
- 26. 하스켈에서 분기 된 프로세스에서 데이터를 읽는 방법?
- 27. Android에서 서비스의 가속도계 데이터를 읽는 방법
- 28. C#에서 ObservableCollection의 데이터를 읽는 방법
- 29. Android - 큰 JSON 데이터를 효과적으로 읽는 방법
- 30. TJvHidDevice를 사용하여 HID 장치 데이터를 읽는 방법
답변 해 주셔서 감사합니다. FILE_FLAG_NO_BUFFERING에 대해 읽었으며 큰 파일을 읽을 때 좋습니다 (1GB 이상). 이 상황에서 캐시 관리자는 캐싱을 제대로 처리 할 수 없습니다. 사실 FILE_FLAG_SEQUENTIAL_SCAN을 사용하여 ifstream 및 ReadFile을 시도했으며 속도가 15 %에서 20 %까지 느려지므로 파일을 읽고 처리하는 데 1 분 또는 그 이상의 시간이 소요됩니다. – Daniel