Question

Comment la mémoire non géré alloué dans le système lorsque des objets COM ou tout autre cas non gérés sont créés à partir de C #?

Était-ce utile?

La solution

Le CLR crée un Runtime Callable Wrapper (RCW) pour la COM objets à instancier. Ceci est une sorte de proxy Interop de .NET au système COM. L'objet COM vous créez est donc alloué et une référence à celle créée dans le CLR, qui met sur le tas.

Vous devez toujours mettre en œuvre IDisposable dans la classe qui contient des références à BRF, parce qu'ils ne sont pas nettoyés automatiquement (les emballages sont sur le tas .NET, mais la COM ne sont pas eux-mêmes des objets). Appel Dispose() sur l'emballage libère les objets COM. Non mise en œuvre IDisposable provoque donc des fuites de mémoire.

Autres conseils

Je suppose qu'ils se traduisent par un appel à l'OS pour créer leur mémoire sur le tas non géré. Le CLR aurait évidemment rien à voir avec eux comme ils ne sont pas gérés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top