2011-02-08 2 views
0

28 바이트 레코드의 데이터 파일을 참조하는 Delphi 앱이 있습니다. 파일은 순차적으로 쓰여지지만 무작위로 읽습니다. 데이터 파일은 N 개의 실제 파일로 분할되어 디스크 문제에 대한 몇 가지 보험을 제공하기 위해 10MB 정도 롤오버합니다. 그리고 우리는 가장 최근의 파일에 대해서만 쓰고 있기 때문에 쓰기가 느리고 느립니다. 그것은 커질 수있었습니다. 시작시 전체 파일 세트를 읽고 색인을 작성하여 가상 레코드 번호가 주어진 파일을 빨리 찾을 수 있도록합니다.Windows 응용 프로그램에서 내 파일 캐시를 구현하는 것이 있습니까?

N 개의 파일로 분할하는 과정에서 읽기 캐시를 구현했습니다. 나는 Windows가 자신의 캐싱에 대해 상당한 양의 노력을하고 있으며 자신과 디스크 파일간에 또 다른 캐시를 둠으로써 무엇인가를 얻고 있는지 궁금합니다.

모든 의견을 감사드립니다.

답변

2

아니요 기존 파일 캐시를보다 효율적으로 사용하려면 file mappings을 사용하십시오.

+0

감사합니다. @ 이그나시오. Windows 네이티브 디스크 파일 캐싱에 의존하는 것보다 파일 매핑이 더 빠른 이유는 무엇입니까? 그리고 델파이에서 어떻게 인터페이스 할까? 아마도 Windows API가있을 것입니다. – rossmcm

+0

* 파일 캐싱보다 빠르지 않습니다. 그것은 * 파일 캐시입니다. 파일을 읽거나 쓰는 대신 파일 캐시 내의 데이터를 직접 조작하고 OS가 나머지를 처리합니다. Delphi가 'Windows'에서 적절한 API 호출을 제공한다고 확신합니다. 그렇지 않은 경우 에게 불만을 제기하십시오. –

+0

@ 이그나시오, 음 ... 이점은 어디 있습니까? 현재 Seek (f, RecordNo)라고 쓸 수 있습니다. 읽기 (f, FRecord); 파일 매핑을 사용하려면 아마도 각 데이터 파일에 대한 파일 맵을 설정하고 파일 매핑 API 호출에 의한 seek/read를 대체해야합니다. 검색/읽기보다 빠릅니다 (원하는 데이터가 Windows 캐시에 있다고 가정). – rossmcm

관련 문제