2016-01-23 2 views
0

J'utilise des objets COM C++ tiers qui semblent contenir quelques membres statiques. La chose est que je dois réinitialiser les membres statiques chaque fois que je commence une nouvelle course. Par conséquent, je dois actuellement fermer et ouvrir mon application. J'ai essayé d'utiliser AppDomain pour décharger toute la mémoire de ces membres statiques mais je ne sais pas pourquoi cela ne fonctionnera pas. Je rasing l'objet COM en utilisant Activator.CreateInstance(Type.GetTypeByCLSID) est-ce qu'il y a quelque chose que je dois faire manuellement pour disposer de ces instances? Notez que j'ai vérifié et que les objets C# statiques sont éliminés de cette façon.Le déchargement de l'appdomain n'efface pas les membres statiques de l'objet COM C++

Répondre

2

ressources non gérés sont appelés non géré parce que leur mémoire n'est pas gérée par le garbage collector géré .

Toute ressource non gérée doit être éliminée manuellement. C'est l'un des objectifs (si ce n'est le plus important) de IDisposable: ses implémentations ont des ressources non managées associées. Par exemple, un FileStream doit être éliminé manuellement car il s'agit d'un wrapper d'appels d'API Win32. En résumé, décharger un AppDomain ou toute autre approche n'aidera pas ici. Vous devez coder pour disposer ces ressources statiques COM chaque fois que vous n'en avez plus besoin (, c'est-à-dire lorsque vous fermez l'application).

+1

Comment est-ce que je peux fermer la ressource statique d'objet COM sans tuer mon application? 'Marshal.ReleaseComObject' fera-t-il le travail? –

+0

@maordavid En fait, je ne suis pas un expert en interopérabilité, donc je n'ai pas de réponse claire à cette autre question. BTW, vous pouvez être sûr que toute ressource non gérée doit être éliminée manuellement dans votre code d'application ... –

+0

@maordavid Il est également parfaitement possible que ces composants COM tiers aient été implémentés de manière incorrecte ... ils devraient fournir un moyen de se réinitialiser leurs ressources non troublées ou qui sait quoi ... –