2010-06-24 6 views
1

파일/폴더에 대한 오버레이 아이콘을 적용하려면 COM DLL을 만들었습니다.COM DLL - 오버레이 아이콘

폴더를 열면 각 파일에 대해 IsMemberOf() 함수가 호출되었습니다. 그리고 파일 상태에 따라 런타임에 db를 쿼리하여 특정 파일에 대해 아이콘을 설정할 것인지 여부를 결정할 수 있습니다. (db의 파일 상태를 업데이트하고 유사하게 수정/추가됨)

디렉토리의 각 파일을 쿼리하는 데 비용이 많이 들며 쿼리가 매우 느립니다. 따라서 첫 번째 파일 (디렉토리의 db에서 모든 파일 상태 가져 오기 및 메모리에 저장)을 쿼리하고이를 사용하여 파일의 나머지 목록을 처리합니다.

왜냐하면 모든 파일이 IsMemberof 기능에서 완전히 처리되는지 여부를 알고 싶습니다. 모든 파일이 처리되면 메모리를 정리할 수 있습니다. 그리고 탐색기가 다시 새로 고치면 파일 상태에 대해 db에 다시 쿼리 할 수 ​​있습니다.

IsMemberof 함수에서 처리되는 모든 파일을 확인하는 방법이 있습니까? 아니면 간단하게 다른 방법이 있습니다.

감사합니다,

답변

1

난 당신이 실제로 셸 확장 핸들러와 IShellIconOverlayIdentifier 인터페이스에 대해 얘기 추측 것입니다.

예, IsMemberOf 메서드가 자주 호출됩니다. 당신은 그것을 지켜야하거나 코드가 dbase를 쿼리하는 많은 시간을 필요로하는 경우 사용자가 탐색기에서 가난한 행동을 경험하게됩니다. 아니요, 다음 호출이 이전 경로와 동일한 폴더로 경로를 전달한다고 가정 할 수 없습니다. 단순히 그렇게 할 가능성이 높습니다.

캐시를 비우려면 폴더 이름이 이전 호출에서 변경된 경우 적절한 동작이 발생할 수 있습니다. 또 다른 전략은 캐싱 된 항목의 수명을 추적하는 것입니다. 캐시가 가득 차면 오래된 것을 버리십시오. 이것은 사용자가 드문 작업이 아닌 폴더간에 앞뒤로 전환 할 때 도움이됩니다.