2011-10-12 4 views
0

제 문제는 응용 프로그램이 수천 개의 파일을로드하는 데 너무 오래 걸리는 것입니다. 예, 시간이 오래 걸릴 것이라는 것을 알고 있지만 시간을 들여 더 빨리 만들고 싶습니다. "로드"가 의미하는 것은 파일을 열어 디스크립터를 얻은 다음 첫 번째 100 바이트 정도를 읽는 것입니다.1000s 파일을 매우 빨리 열고 읽는 방법

내 주요 전략은 모든 파일을 열지 않고 닫고 모든 파일을 닫을 두 번째 스레드를 만드는 것이 었습니다. 이 스레드가 주 스레드보다 먼저 실행되고 OS가이 파일 설명자를 미리 캐싱 중이므로 내 주 스레드가 열면 빨리 열리기 때문에 도움이되는 것 같습니다. 이것은 주 스레드가 이러한 파일에서 읽은 데이터를 구문 분석하는 동안 스레드가 이러한 파일 설명자를 캐싱 할 수 있기 때문에 실제로 도움이되었습니다.

그래서 내 진짜 질문은 ... 내가 더 빨리이 작업을 수행하려면 어떻게해야합니까? 어떤 접근 방식이 있습니까? 누구든지이 일을 성공 했습니까?

OS 프리 페치 호출에 대해 들었지만 가상 메모리 페이지 용이었습니다. 운영 체제에 알려줄 수있는 방법이 있습니까?이 파일들이 모두 곧 필요하게 될 것입니다 - 미리 수집 해 두는 것이 좋습니다. 내 미리보기 스레드는 꽤 조잡합니다.

사용할 수있는 저수준 디스크 기술이 있습니까? 도움이 될만한 파일 액세스 패턴이 있습니까? 현재로드 된 파일은 모두 같은 폴더에 있습니다. 디스크 상에 정확히 어디에 위치하는지 그리고 어떤 순서로 파일을 열 것인지를 결정할 방법이 없다고 가정합니다. 나는 또한이 디스크를 가능한 한 효율적으로 만들기위한 하드웨어가 있다고 추측합니다.

내 응용 프로그램은 주로 Windows 용이지만 유닉스 제안도 도움이 될 것입니다.

차이점이 있다면 C++로 프로그래밍하고 있습니다.

감사합니다, -julian

답변

0

내 첫번째 생각이이 프로그램 수준에서 해결하려면 어려울 것입니다 것입니다.

여러분은 Linux와 OSX가 Windows를 사용하는 시간의 아주 짧은 시간 안에 수천 개의 파일에 액세스 할 수 있음을 알게 될 것입니다. 기계에 대한 통제력이 얼마나되는지 모르겠습니다. FAT 파티션에 수천 개의 파일을 보관할 수 있다면 NTFS보다 더 나은 결과를 얻을 수 있습니다.

얼마나 자주 이러한 파일을 검색하고 얼마나 자주 변경하고 있습니까? 읽기 비율이 너무 높으면 각 파일의 시작 부분을 캐시에 복사하는 것이 좋습니다. 캐시는 1000 개의 파일 각각에 대해 파일 이름, 수정 시간 및 100 바이트를 저장할 수 있습니다.

관련 문제