VB6 및 Win32 API를 사용하여 데이터를 파일에 쓰는 중입니다.이 기능은 데이터 내보내기 용이므로 디스크에 쓰기 성능이 내 고려 사항의 핵심 요소입니다. 따라서 CreateFile
을 호출하여 파일을 열 때 FILE_FLAG_NO_BUFFERING
및 FILE_FLAG_WRITE_THROUGH
옵션을 사용하고 있습니다.FILE_FLAG_NO_BUFFERING으로 열린 파일의 끝 부분을 어떻게 써야합니까?
FILE_FLAG_NO_BUFFERING
은 내 자체 버퍼를 사용하고 디스크 섹터 크기의 배수로 파일에 데이터를 쓰도록 요구합니다. 데이터의 마지막 부분을 제외하고는 일반적으로 문제가되지 않습니다. 섹터 크기는 문자 0의 파일 밖 패딩을 포함 할 것입니다. 마지막 블록이 이러한 문자 0을 포함하지 않도록 작성되면 파일 크기를 어떻게 설정합니까?
SetEndOfFile
을 사용할 수 있지만 FILE_FLAG_NO_BUFFERING
을 사용하지 않고 파일을 닫은 다음 다시 열어야합니다. 나는 누군가가 VB4에서 이것을 사용하고 선언하는 방법을 찾을 수없는 NtSetInformationFile
에 대해 이야기하는 것을 보았다. SetFileInformationByHandle
정확히 원하는대로 할 수 있지만 Windows Vista에서만 사용할 수 있으며 내 응용 프로그램은 이전 버전의 Windows와 호환되어야합니다.
매우 흥미로운 점은 파일을 작성하는 다양한 방법을 벤치마킹하려는 것이지만 그럼에도 불구하고 제안에 감사드립니다. 이 방법을 시도하게 된 동기는 winasm.net의 블로그 게시물 (http://www.winasm.net/forum/index.php?showtopic=794)이었습니다. – AnturCynhyrfus
이 특별한 경우에 맞을 수도 있지만 그 질문에 대한 답은 아닙니다. –
Marvin, 음, 네, 질문에 대답하지 않았습니다 (gabr이 그렇게했습니다). 그러나 근본적인 문제를 해결하고 프로세스 속도를 높였습니다. :) –