J'ai créé un outil qui importe une feuille Excel. L'objet COM Excel est créé pendant la durée de vie de l'application. J'ai appliqué le modèle MVP à mon outil afin que VIEW et Presenter séparent l'interface utilisateur et la logique.Impossible de libérer l'objet COM Excel dans .NET
La vue qui est un formulaire WinForm possède une méthode Dispose() héritée de la classe From, qui est redéfinie dans le code Deisgner.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
_presenter.Dispose();
}
littéralement où Cest insérer mon appel Éliminez o mon présentateur, qui est lui-même un code managé, mais contient encore des objets COM non gérés.
Le présentateur est ensuite essayer de libérer l'objet COM en faisant ceci:
public void Dispose()
{
Int32 countDown = 1;
while (countDown > 0)
countDown = Marshal.ReleaseComObject(_excelObj);
}
Si j'ouvre l'application sans rien importer, le processus Excel disparaît après la fermeture de l'application Teh. Sinon, si l'application est utilisée pour importer une feuille, l'objet Excel ne lâche plus et reste en mémoire, même après que le travail a été exécuté ou annulé avec succès.
J'ai trouvé un bon lien qui m'a aidé plus loin, mais le problème reste encore: How do I ensure that objects are disposed of properly in .NET?
Merci pour l'aide,
Je ne connais pas suffisamment de détails pour publier une réponse, mais le modèle d'objet Excel n'a-t-il pas quelque part une méthode Quit? Je crois me souvenir du modèle d'objet de Word, et que vous avez dû appeler explicitement pour le déchargement du serveur. –