Éviter les processus Excel persistants avec C # Excel Interop
Travailler avec Excel Interop en C # nécessite une gestion minutieuse des objets COM pour empêcher les processus Excel persistants une fois votre application terminée. Bien que certains développeurs utilisent Marshal.ReleaseComObject
dans une boucle suivi d'une collection de déchets, ce n'est pas toujours suffisant. Le problème découle souvent de la façon dont les objets COM sont accessibles.
Le danger à double point
Accédant directement aux membres d'objets COM sans les attribuer à des variables (par exemple, excelApp.Worksheets.Open(...)
) crée une référence cachée qui empêche le nettoyage approprié. C # crée un wrapper, mais cet emballage n'est pas sorti, en gardant Excel en marche.
La solution: affectation de variable explicite
La clé consiste à toujours affecter des objets COM aux variables avant d'utiliser leurs membres:
<code class="language-csharp">Worksheets sheets = excelApp.Worksheets; // Assign to a variable Worksheet sheet = sheets.Open(...); // ... your code ... Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(sheet);</code>
Cela vous donne un contrôle explicite sur la durée de vie de l'objet, permettant une élimination appropriée en utilisant Marshal.ReleaseComObject
.
Considérations de débogage
N'oubliez pas que les débuggeurs peuvent interférer avec la collecte des ordures. Les processus Excel persistants observés lors du débogage peuvent ne pas refléter le comportement réel d'une version de version. Testez toujours votre nettoyage soigneusement sans le débogueur attaché.
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!