Je sais que la différence fondamentale qu' ReleaseComObject
seulement réduit le compteur de un et FinalReleaseComObject
, elle diminue à zéro.
Donc ce que j'ai l'habitude de l'entendre, appelez FinalReleaseComObject
parce que vous êtes sûr que l'objet COM est vraiment libéré.
Mais cela me fait demander, il est un point sur ce compteur de droite? N'êtes-vous pas briser ce mécanisme si vous appelez toujours FinalReleaseComObject
. Si le compteur n'est pas un avant vous appelez ReleaseComObject
,, il est probablement pas une raison pour cela?
Ce pourrait-il provoquer à être plus élevé que celui où il ne devrait pas être?
Merci à l'avance.
PS: Mon COM de l'expérience consiste seulement à l'aide d'Excel Interop. Vous ne savez pas si cette question est locale pour ce domaine (c'est à dire en dehors de l'Interopérabilité, FinalReleaseComObject
n'est pas souvent utilisé).
Mise à jour 1
L' article de Dan mentionné parle à l'aide de ReleaseComObject
lorsque vous avez terminé. Ce que je comprends de l' article, c'est la façon normale. Je pense que si vous faites cela régulièrement, il devrait fonctionner correctement. Dans un commentaire à l' article , l'auteur propose à quelqu'un d'appeler ReleaseComObject
dans une boucle jusqu'à ce qu'il est vraiment sorti (l' article est à partir de 2006, c'est donc analogues à l'appel de FinalReleaseComObject
). Mais il affirme également que cela pourrait être dangereux.
Si vous voulez vraiment le BRF à appeler Release() à un point particulier dans le code, vous pouvez appeler ReleaseComObject() dans une boucle jusqu'à ce que la valeur de retour atteint zéro. Cela devrait assurer le BRF va appeler Release(). Toutefois, si vous le faites, être averti, quand les autres références essaie d'utiliser le BRF, il va provoquer une exception."
Cela me mène à croire que c'est vraiment pas une bonne idée de toujours faire appel à FinalReleaseComObject
, comme vous pouvez causer des exceptions ailleurs. Comme je le vois maintenant, vous devez seulement appeler cette fonction si vous êtes absolument sûr que vous le pouvez.
Encore, j'ai peu d'expérience en la matière. Je ne sais pas comment je peux être sûr. Si le compteur est augmenté quand il ne devrait pas être, n'est-il pas mieux pour résoudre ce problème? Si oui, alors je dirais FinalReleaseComObject
est plus un hack qu'une meilleure pratique.