Éviter les processus excel.exe persistants: meilleures pratiques pour C # Excel Interop
Travailler avec des objets Interop Excel dans C #, en particulier le ApplicationClass
, nécessite une gestion minutieuse des ressources pour empêcher le processus Excel.exe
de persister après la fin de votre application. Même avec le code de nettoyage, le processus peut rester actif, indiquant une mauvaise manipulation d'objets.
Une surveillance fréquente accédez directement aux membres d'objets COM sans les attribuer à des variables. Cela conduit à la création d'objets wrapper non gérés qui ne sont pas sortis pendant le nettoyage. La solution consiste à toujours affecter des objets COM aux variables avant d'utiliser leurs membres.
par exemple, au lieu de:
<code class="language-csharp">excelApp.Worksheets.Open(...); Marshal.ReleaseComObject(sheet);</code>
Utiliser:
<code class="language-csharp">Worksheets sheets = excelApp.Worksheets; Worksheet sheet = sheets.Open(...); Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(sheet);</code>
Surtout, évitez les appels de membres de l'objet COM "chaînage". Appeler directement un membre sans affectation variable crée ces objets de wrapper problématiques.
N'oubliez pas d'inclure un nettoyage complet dans un bloc finally
:
<code class="language-csharp">while (Marshal.ReleaseComObject(excelSheet) != 0) { } excelSheet = null; GC.Collect(); GC.WaitForPendingFinalizers();</code>
Enfin, sachez que les débogueurs peuvent interférer avec la collecte des ordures. Détachez le débogueur avant de fermer le classeur Excel pour assurer un nettoyage approprié. Le suivi de ces étapes libérera efficacement les objets interops et empêchera les processus d'arrière-plan inutiles.
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!