2011-12-21 1 views
0

그래서 회사의 고객 인덱싱 프로그램을 만들면서 기본적으로 코딩되고 작동하는 모든 작업을 제외하고는 인덱싱 프로그램에서 사용자 지정 인덱싱 된 디렉터리를보고 기본 데이터 저장소를 업데이트해야합니다. 즉시 전체 색인 생성의 필요성을 제거하는 데 도움이됩니다.FileSystemWatcher WPF 응용 프로그램에서의 fallfall 및 SQLite

기본 SQLite 데이터베이스를 사용하여 WPF/C#의 모든 항목을 코딩 했으므로 폴더 감시자가 "비중 하중"에서 잘 작동 할 것이라고 확신하지만 문제는 TortoiseSVN을 사용하고 사용자가 SVN 업데이트를 수행 할 때, FileSystemWatcher 및 SQLite 업데이트가 많은 파일로드를 생성하는 등의 경우 (심지어 최대 버퍼 크기까지) 유지할 수 없습니다. 기본적으로 나는 감시자 사건이 명중 될 때마다 데이타베이스 삽입을하고있다.

그래서 내 주요 질문은 ... 누군가가 이러한 무거운 하중을 처리하기 위해이 파일 감시자를 구현하는 방법에 대한 제안을 가지고 있습니까?

몇 가지 생각은 다음과 같습니다. (1) 모든 쿼리에 대한 준비 컬렉션을 만들고 타이머와 스레드를 사용하여 나중에 데이터를 삽입하십시오. (2) 파일에 쿼리를 작성하고 나중에 타이머 스레드를 사용하십시오. 삽입

도움말 .... 가장 쉬운

답변

0

타이머 오프 업데이트 킥 (예를 들어, 1 분)하는 것입니다. 다른 업데이트가 들어오는 경우 변경 사항을 대기시키고 타이머를 다시 시작합니다. 활동없이 1 분이 지나면 처리를 시작합니다.

+0

(이것은 물론, 시스템에 상당한 유휴 시간이있는 경우에만 작동합니다) – Stu

1

파일 감시 이벤트에서받은 데이터를 메모리에 버퍼링하려고합니다. 따라서 등록 된 파일 감시자로부터 이벤트를 수신 할 때, 활동의 폭발로 가능한 한 빨리 메모리에 이벤트를 축적 할 수 있습니다. 그런 다음 별도의 프로세스 나 스레드에서 메모리 버퍼에서 읽은 다음 영구 저장소 나 시간이 많이 소요되는 프로세스에 필요한 모든 작업을 수행합니다.

1

모든 요청에서 대기열을 사용하여 대기열에 넣을 수 있습니다. 나는 밖에서 나오는 MS MessageQueue를 사용해 좋은 경험을했고 아주 사용하기 쉽습니다.

http://www.c-sharpcorner.com/UploadFile/rajkpt/101262007012217AM/1.aspx 그런 다음 큐의 요소의 미리 정의 된 번호를 잡고 데이터베이스에 삽입 별도의 WorkerThread를 참조하십시오. 여기에 단일 insert를 bulkinsert에 병합하는 것이 좋습니다. 삽입하기 전에 CPU 및 IO 성능을 100 % 확신 할 수 있는지 확인하십시오. 다음은 CPU 사용률을 결정하는 코드 :

Process.TotalProcessorTime.TotalMilliseconds/Environment.ProcessorCount