Fermer le processus de l'application Excel en C# après l'accès aux données
Fermer le processus de l'application Excel en C# après l'accès aux données
Comment s'assurer que le processus Excel.exe est correctement fermé après avoir utilisé Excel Interop en C# ?
Re: Fermer le processus de l'application Excel en C# après l'accès aux données
Le problème courant est que des processus Excel « fantômes » restent en mémoire. Solution :
```csharp
// Libérer chaque objet COM dans l'ordre inverse
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(worksheet);
workbook.Close(false);
Marshal.ReleaseComObject(workbook);
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
// Forcer le GC
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
```
Règle d'or : ne jamais utiliser deux points consécutifs (comme `app.Workbooks.Open(...)`) car cela crée des objets COM implicites non libérables.
```csharp
// Libérer chaque objet COM dans l'ordre inverse
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(worksheet);
workbook.Close(false);
Marshal.ReleaseComObject(workbook);
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
// Forcer le GC
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
```
Règle d'or : ne jamais utiliser deux points consécutifs (comme `app.Workbooks.Open(...)`) car cela crée des objets COM implicites non libérables.