Löschen von Dateien, die durch andere Prozesse in .NET gesperrt wurden
Das Entfernen einer Datei, die derzeit von einem anderen Prozess verwendet wird, stellt eine häufige Herausforderung in der .NET-Entwicklung dar. Ein typisches Beispiel sind Anwendungen, die Bilder von der Festplatte in den Speicher laden; Das anschließende Löschen dieser Dateien kann sich als schwierig erweisen.
Dieses Problem wurde kürzlich in einer Entwickleranfrage hervorgehoben. Der Entwickler hat versucht, eine von seiner Anwendung verwendete Datei zu löschen, selbst nachdem er UI-Elemente entfernt und Bildverweise auf null
gesetzt hatte. Trotz dieser Schritte blieben IOException
Fehler bestehen, was darauf hindeutet, dass die Datei weiterhin gesperrt war.
Entsperren der Datei
Die Ursache liegt oft in der Müllabfuhr. In .NET werden nicht referenzierte Objekte vom Garbage Collector gelöscht, dies geschieht jedoch nicht sofort. Diese Verzögerung kann zu offenen Dateihandles führen, selbst nachdem das entsprechende Bildobjekt aus dem Speicher entfernt wurde.
Die Lösung besteht darin, die Garbage Collection manuell zu initiieren und auf den Abschluss ausstehender Finalizer zu warten. Der folgende Codeausschnitt veranschaulicht dies:
<code class="language-csharp">System.GC.Collect(); System.GC.WaitForPendingFinalizers(); File.Delete(picturePath);</code>
Der Aufruf von GC.Collect()
und GC.WaitForPendingFinalizers()
erzwingt die sofortige Speicherbereinigung, gibt alle verbleibenden Verweise auf das Bildobjekt frei und ermöglicht das erfolgreiche Löschen der Datei.
Das obige ist der detaillierte Inhalt vonWie lösche ich eine von einem anderen Prozess gesperrte Datei in .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!