Ich verwende ein FileSystemWatcher
(in einer ASP.NET-Webanwendung), um eine Datei auf Änderungen zu überwachen. Der Watcher wird im Konstruktor einer Singleton-Klasse eingerichtet, z. B .:
Bis jetzt läuft alles gut. Aber meine Frage ist:
Ist es sicher, den Watcher mit einer lokalen Variablen ( var fsw
) einzurichten? Oder sollte ich einen Verweis darauf in einem privaten Bereich behalten, um zu verhindern, dass Müll gesammelt wird?
Im obigen Beispiel wird FileSystemWatcher
nur am Leben erhalten, weil die Eigenschaft EnableRaisingEvents
auf true
gesetzt ist. Die Tatsache, dass die Singleton-Klasse über einen Ereignishandler verfügt, der für FileSystemWatcher.Changed
event registriert ist, hat keine direkte Auswirkung auf fsw
, die für die Garbage-Sammlung infrage kommen. Siehe Führen Ereignishandler dazu, dass die Garbage Collection nicht mehr stattfindet? , um weitere Informationen zu erhalten Informationen.
Der folgende Code zeigt, dass bei EnableRaisingEvents
auf false
gesetzt ist, das FileSystemWatcher
Objekt ist Garbage Collection: Sobald GC.Collect()
aufgerufen wird, ist die IsAlive
Eigenschaft auf der WeakReference
false
.
Tags und Links c# asp.net garbage-collection filesystemwatcher