Sto utilizzando uno FileSystemWatcher
(in un'applicazione Web ASP.NET) per monitorare un file per le modifiche. L'osservatore è impostato nel costruttore di una classe Singleton, ad esempioDevo mantenere un riferimento a FileSystemWatcher?
private SingletonConstructor()
{
var fileToWatch = "{absolute path to file}";
var fsw = new FileSystemWatcher(
Path.GetDirectoryName(fileToWatch),
Path.GetFileName(fileToWatch));
fsw.Changed += OnFileChanged;
fsw.EnableRaisingEvents = true;
}
private void OnFileChanged(object sender, FileSystemEventArgs e)
{
// process file...
}
Tutto funziona bene finora. Ma la mia domanda è:
È sicuro impostare l'osservatore utilizzando una variabile locale (var fsw
)? O dovrei mantenere un riferimento ad esso in un campo privato per evitare che venga raccolto dalla spazzatura?
Non riesco a trovare alcuna documentazione per dire che 'EnableRaisingEvents' ha alcun effetto sulla garbage collection. Ho pensato che fosse necessario un campo locale per garantire che 'FileSystemWatcher' non fosse un garbage collector. – Lukazoid
Ho modificato la mia risposta con un esempio che mostra FileSystemWatcher è garbage collection se EnableRaisingEvents è false. –
Grazie per questo, vorrei che la funzionalità fosse documentata su MSDN, sembra che sarebbe troppo facile finire con alcuni 'FileSystemWatcher' in sospensione. – Lukazoid