Windows 7 64 비트에서 많은 수의 이미지 파일 (~ 10000 x 16MB)에 대한 읽기/쓰기 액세스 권한이있는 메모리 매핑 파일을 사용하고 있습니다. 내 목표는 다음과 같습니다.메모리 매핑 된 파일을 비동기 적으로 플러시하려면 어떻게해야합니까?
가능한 한 많은 데이터를 캐시합니다.
가능한 한 빨리 새 이미지를 할당하고 쓸 수 있습니다.
따라서 파일에 액세스하기 위해 메모리 매핑 된 파일을 사용하고 있습니다. 캐싱은 잘 작동하지만 OS가 실제 메모리가 거의 다 떨어지기 전에는 더티 페이지를 비우지 않습니다. 그 때문에 물리적 메모리가 채워지면 새 파일을 할당하고 쓰는 것이 아주 느립니다.
한 가지 해결책은 정기적으로 FlushViewOfFiles()
을 사용하는 것이지만이 기능은 데이터가 디스크에 기록 될 때까지 반환되지 않습니다.
파일 매핑을 비동기 적으로 플러시 할 수 있습니까? 내가 찾은 유일한 해결책은 Unmap()
과 MapViewOfFile()
이지만,이 접근법을 사용하면 같은 데이터 포인터를 다시 가져올 수 없습니다. 누군가가 더 나은 접근을 제안 할 수 있습니까?
편집 :
더티 페이지의 플러싱에 결과를 고정되지 않은 메모리 영역에 VirtualUnlock()
를 호출 : 조금 이상 WINAPI
문서를 읽기는 , 내가 내 문제에 대한 적절한 해결책을 찾을 것으로 보인다.