Salve a tutti,
Ho sviluppato un servizio windows che utilizza il FileSystemWatcher per controllare i file creati, rinominati e cancellati di un certo percorso di rete.
Se i nomi di questi file rispettano certe regole allora vanno messi a disposizione di un programma batch piuttosto che di un altro che girano sulla stessa macchina dove gira il servizio.
Quindi ho una regola (regular expression) per ogni programma, e una chiave per ogni programma che interrogherà il servizio affinchè gli fornisa la lista di file destinati a lui.
Quindi quello che questo servizio fa è di istanziare un oggetto dictionary, creando n chiavi e inserendo per ciascuna chiave un'oggetto Queue(of string) che verrà popolata dei vari percorsi di file avranno superato con successo la regola per quel programma.
Questo oggetto poi lo registro con l'ipcChannel per renderlo condiviso fra il server(il servizio) e i vari client (i programmi batch)
Fin qui tutto ok, lo sviluppo è andato a buon fine e tutto pare funzionare bene... i primi 5 minuti.
Poi inspiegabilmente si spaccano tutti i client (Errore: La chiave nel dizionario non è stata trovata). Debuggando il servizio ho notato 2 cose:
La prima è che la variabile del servizio che mantiene la referenza condivisa all'oggetto dictionary se per qualche minuto non viene richiesta svuota le chiavi (VariabileDictionary.Count = 0)
La seconda cosa è che se metto un timer nel servizio che ogni tanto (nel mio caso 3 minuti) fa una cosa qualsiasi con l'oggetto dizionario... ma anche solo leggere un valore.. questo "svuotamento" non accade. Potrei lasciare così e fregarmene, visto che in questo modo funziona, ma sono curioso di conoscere il problema, se qualcuno di voi lo conosce o lo ha già sperimentato. Mi chiedo se sia il garbage collector...