J'ai écrit du code dans VB qui vérifie qu'un port particulier dans le pare-feu Windows est ouvert, et ouvre un autre dans le cas contraire. Le code utilise des références à trois DLL COM. J'ai écrit une classe WindowsFirewall, qui importe l'espace de noms principal défini par les DLL. Au sein des membres de la classe WindowsFirewall, je construis certains des types définis par les DLL référencées. Le code suivant n'est pas la classe entière, mais montre ce que je fais.Les références COM Dll nécessitent-elles une élimination manuelle? Si c'est le cas, comment?
Imports NetFwTypeLib
Public Class WindowsFirewall
Public Shared Function IsFirewallEnabled as Boolean
Dim icfMgr As INetFwMgr
icfMgr = CType(System.Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")), INetFwMgr)
Dim profile As INetFwProfile
profile = icfMgr.LocalPolicy.CurrentProfile
Dim fIsFirewallEnabled as Boolean
fIsFirewallEnabled = profile.FirewallEnabled
return fIsFirewallEnabled
End Function
End Class
Je ne référence pas les DLL COM très souvent. J'ai lu que le garbage collector ne nettoie pas le code non géré et je voudrais savoir comment m'assurer que je n'ai pas introduit de fuites de mémoire. S'il vous plaît dites-moi (a) si j'ai introduit une fuite de mémoire, et (b) comment je peux le nettoyer.
(En théorie, les objets icfMgr et profile allouent de la mémoire qui reste inédite jusqu'à la fermeture de l'application. Ni l'un ni l'autre n'implémente IDisposable, ni l'un ni l'autre ne contient une méthode Finalize Je suppose qu'ils ne sont peut-être pas pertinents ici, et que ces deux méthodes de libération de mémoire s'appliquent uniquement aux types .Net.)