Sto per implementare la soluzione archivistica FileSystemWatcher. Ho una directory per monitorare le creazioni di file e il compito di risucchiare i file creati e inserirli in un DB. Approssimativamente ciò comporterà la lettura e l'elaborazione di 6 o 7, 80 file di testo char che appaiono ad una velocità di 150 mS in raffiche che si verificano ogni due secondi, e raramente si dovrà elaborare anche un file binario da 2 MB. Molto probabilmente sarà un processo 24 ore su 24, 7 giorni su 7.Dopo l'avvio di FileSystemWatcher - Thread Pool o thread dedicato?
Da ciò che ho letto sull'oggetto FileSystemWatcher è meglio accodare i suoi eventi in un thread e quindi rimuoverli/elaborarli in un altro thread. Il dilemma che ho adesso è quale sarebbe il miglior meccanismo di creazione del thread che esegue l'elaborazione. Le scelte che posso vedere sono:
Ogni volta che ricevo un evento FSW creo manualmente un nuovo thread (sì lo so .. architettura stupido, ma dovevo dirlo).
Gettare l'elaborazione al pool di thread CLR ogni volta che ricevo un evento FSW
In avvio, creare un secondo thread dedicato per l'elaborazione e l'uso di un modello produttore/consumatore per gestire il lavoro. Il thread principale accoda la richiesta e il secondo thread la abbandona ed esegue il lavoro.
sto tendente al terzo metodo, come quello preferito come so che sarà sempre richiesto il filo di lavoro - e probabilmente anche di più perché non ho confidenza con il pool di thread.
+1, vorrei aggiungere che l'uso del pool di thread proverà a gestire le richieste simultaneamente su più thread che non sembrano una buona cosa per la vostra applicazione. –
Anon .. Da quello che ho fatto la mia elaborazione dovrebbe essere fatta bene e veramente nei 150mS tranne nel caso dell'elaborazione del file binario - che funzionerà a circa 150mS ma dovrebbe essere un evento talmente raro che ci sarà un sacco di tempo di recuperare se le cose vengono messe in coda. –