Éviter les fuites de mémoire avec Excel Interopr dans .NET
Travailler avec des objets d'interopt COM comme Excel ApplicationClass
dans .NET nécessite une manipulation minutieuse pour éviter les fuites de ressources et les problèmes de mémoire. Une mauvaise élimination peut laisser des processus en cours d'exécution et consommer une mémoire inutile.
Le problème: élimination incomplète
Le simple fait d'appeler System.Runtime.InteropServices.Marshal.ReleaseComObject
pourrait ne pas suffire pour libérer pleinement un objet Interop Excel. Le problème découle souvent de la façon dont nous interagissons avec ces objets.
les "éviter les points consécutifs" les meilleures pratiques
Chaîne d'accès multiples à l'aide de points consécutifs (par exemple, excelApp.Worksheets.Open(...)
) peut entraîner des problèmes. Le compilateur C # crée un wrapper géré qui, s'il n'est pas explicitement publié, peut conserver des références à l'objet com sous-jacent.
La solution: affectation de variable explicite
L'approche recommandée consiste à attribuer le résultat de chaque accès d'objet COM à une variable distincte avant une nouvelle interaction. Au lieu d'appeler directement excelApp.Worksheets.Open(...)
, attribuez d'abord à une variable: excelApp.Worksheets
<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>
. Marshal.ReleaseComObject
Exemple illustrant l'élimination correcte:
L'extrait de code révisé ci-dessous présente la bonne technique d'élimination:
<code class="language-csharp">// ... other code ... Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); Worksheets sheets = excelApp.Worksheets; Worksheet sheet = sheets.Open(@"C:\path\to\your\excel\file.xlsx"); // Example file path // ... work with the Excel sheet ... Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(sheets); excelApp.Quit(); Marshal.ReleaseComObject(excelApp); // ... other code ...</code>
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!