2 백만 이상의 파일이 처리되고 10 년 동안 Windows 서비스가 활성화 된 .Net 1.1에서 3.5로 전환되었습니다. PDF 파일을 보관하는 자체 STA 스레드에서 FileSystemWatcher 이벤트 처리기를 사용하여 PDFPrinter에 그래픽을 인쇄하는 비동기 클래스가 있습니다. 기존의 클라이언트 응용 프로그램 방법으로 인해 DateTime 간격으로 누락 된 PDF를 모두 만들 수 있으므로 PDF를 비동기 적으로 만들 수 있습니다.FileSystemWatcher .Net 3.5
(1) 이벤트 처리기가 STA 스레드에서 분리되지 않으면 서비스가 중지됩니다.
(2) 몇 초 안에 도착하는 PDF가 몇 개 밖에 없으므로 정상적으로 작동합니다. 이를 5 개의 PDF로 늘리면 필연적으로 하나의 파일이 보관되지 않습니다. 15 개의 PDF로 늘리십시오. 몇몇은 보관되지 않습니다 (모든 것을 테스트 베드에서 수행하십시오). 파일을 이동하기 전에 파일이 존재하는지 확인하고 2 번의 성공적인 탐지가 필요합니다 (PDFPrinter는 팬텀 파일 생성 이벤트를 생성하는 경향이 있음). 또한 파일에 대한 독점적 액세스를 확인합니다. 업데이트 : COM 상호 작용 코드의 다른 섹션에서 다른 STA 스레드 생성 접근법 (매개 변수가있는 클래스와 메서드를 통해)을 시도했으며 신뢰할 수없는 문제 (동일한 스레드의 약 50 % 만 완료)가있었습니다.
PDF의 경우 버려진 파일을 보관하도록 Timer를 설정하려고했지만 여러 Timers가 동일한 보관 작업을 수행하지 않도록 Timer를 시작할시기가 불분명합니다 (Oracle 동시성 문제로 인한 추가 위험이 있음) ; 그 디자인은 벨트와 멜빵 같은 느낌입니다 (부정적인 요소).
이것은 일반적인 패러다임입니다. 강력한 것은 어렵지 않습니다. 깨달음 (1)을 찾고 새 STA 스레드를 안정적으로 완성하는 데 도움이됩니다 (2).
의사
Test bed user interface:
// Process 20 instrument raw data files in a loop
// For each file:
// 1-2 s to setup processing and retrieve metadata from database on each file
// (A) spin off STA worker thread
// call instrument vendor COM API to read data file
// setup FileSystemWatcher for PDF files
// create graphical image PDF
// handle PDF_Created in a shell that ...
// (B) spins off STA worker thread to
// archive the PDF
가장 간단한 재현 가능한 코드 샘플을 공유하여 추론 할 코드가 있습니까? – rene
나는 진정으로 소망한다. 내가 할 수있는 최선의 방법은 의사 코드입니다. 내가 작성한 것에 대한 모든 의견은 환영받을 것이다. – beanmf