Estoy usando un FileSystemWatcher
(en una aplicación web ASP.NET) para monitorear un archivo de cambios. El observador está configurado en el constructor de una clase Singleton, por ejemplo:¿Debo guardar una referencia 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...
}
Todo funciona bien hasta el momento. Pero mi pregunta es:
¿Es seguro configurar al vigilante usando una variable local (var fsw
)? ¿O debería mantener una referencia en un campo privado para evitar que se recolecte basura?
No encuentro documentación que indique que 'EnableRaisingEvents' tenga algún efecto en la recolección de basura. Pensé que se necesitaba un campo local para garantizar que 'FileSystemWatcher' no fuera basura. – Lukazoid
He editado mi respuesta con un ejemplo que muestra que FileSystemWatcher es basura si EnableRaisingEvents es falso. –
Gracias por eso, desearía que la funcionalidad estuviera documentada en MSDN, parece que sería demasiado fácil terminar con algunos 'FileSystemWatcher' colgantes. – Lukazoid