Suppression de fichiers verrouillés par d'autres processus dans .NET
La suppression d'un fichier actuellement utilisé par un autre processus présente un défi courant dans le développement .NET. Un exemple typique concerne les applications qui chargent des images du disque vers la mémoire ; par la suite, la suppression de ces fichiers peut s'avérer difficile.
Ce problème a été récemment mis en évidence dans une requête d'un développeur. Le développeur a tenté de supprimer un fichier utilisé par son application, même après avoir supprimé les éléments de l'interface utilisateur et défini des références d'image à null
. Malgré ces étapes, IOException
des erreurs ont persisté, indiquant que le fichier est resté verrouillé.
Déverrouillage du fichier
La cause profonde réside souvent dans la collecte des déchets. Dans .NET, les objets non référencés doivent être supprimés par le garbage collector, mais cela n'est pas instantané. Ce délai peut entraîner l'ouverture de descripteurs de fichiers, même après la suppression de l'objet image correspondant de la mémoire.
La solution consiste à lancer manuellement le garbage collection et à attendre la fin des finaliseurs en attente. L'extrait de code suivant illustre ceci :
<code class="language-csharp">System.GC.Collect(); System.GC.WaitForPendingFinalizers(); File.Delete(picturePath);</code>
L'appel de GC.Collect()
et GC.WaitForPendingFinalizers()
force le garbage collection immédiat, libérant toutes les références persistantes à l'objet image et permettant la suppression réussie du fichier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!