Muss ich einen Verweis auf einen FileSystemWatcher behalten?

8

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 .:

%Vor%

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?

    
M4N 02.02.2012, 10:21
quelle

1 Antwort

6

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 .

%Vor%     
Muath Ali 03.02.2012, 00:25
quelle