Les assemblys PIA sont des wrappers Interop .NET. Cela signifie que dans le destructeur de l'objet (ou Dispose - je ne me souviens plus) il gèrera automatiquement son nombre de références. L'astuce est que certaines références ne seront pas libérées tant que le garbage collector ne sera pas exécuté. Cela dépend de ce que l'objet COM instancie. Par exemple, un objet COM qui ouvre les curseurs de base de données conservera ces curseurs en mémoire jusqu'à ce que le nombre de références sur ces curseurs soit libéré. Avec l'interopérabilité .NET/COM, les références ne sont pas libérées jusqu'à ce que le garbage collector s'exécute ou que vous publiez explicitement la référence en utilisant Marshal.ReleaseComObject (ou FinalReleaseComObject).
Personnellement, je n'ai pas travaillé avec les PIA Microsoft Office, mais dans la plupart des circonstances, vous ne devez pas avoir pour publier explicitement les références. Ce n'est que lorsque votre application commence à verrouiller d'autres ressources ou se bloque que vous devriez commencer à se méfier des références qui pendent.
EDIT: Si vous exécutez dans une situation où vous avez besoin de nettoyage des objets COM/Interop, utilisez Marshal.FinalReleaseComObject - qui prend la référence compte tout le chemin à zéro au lieu de simplement décrémentation par un - et définir la référence d'objet à null. Vous pouvez forcer forcer la collecte de place (GC.Collect) si vous vraiment voulez être sûr, mais faites attention à GC trop souvent car il invoque un coup de performance notable.
Mike, commenterais-tu celui-ci: http://stackoverflow.com/questions/159313/runtime-callable-wrapper-rcw-scope-process-or-or-application-domain –