IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

De la nécéssité de détruire les instances


Sujet :

VBA

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut De la nécéssité de détruire les instances
    Bonjour,

    Sur des code sources instanciant des objets natifs, personnalisés ou issus de librairies externes,
    je constate qu'il est reproché de ne pas détruire les instances manuellement.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub Exemple()
        Dim MyInstance As MyClass
        Set MyInstance = New MyClass
    
        '// code quelconque
    
        Set MyInstance = Nothing
    End Sub
    Si à première vue, cela semble être une bonne pratique (on détruit ce que l'on a crée), il n'en est rien.
    En effet, les mécanique standard du langage, aussi appelé "Garbage Collector", même s'il est rudimentaire, prendra en charge de détruire les instances automatiquement lorsque les variables sortirons de la portée courante.
    Bien qu'elle ne soit pas fausse, c'est une pratique qui se substitue au GC, et qui, outre le fait d'écrire du code supplémentaire qui n'apporte que peut de plus-value, encourage le programmeur à consacrer de l'énergie et du temps à la gestion des ressources plutôt que se focaliser sur le comportement désiré.

    Sauf exception (bugs, nécessité de détruire une instance prématurément, références circulaires ou documentation explicite d'une librairie), détruire manuellement les instances est inutile, et redondant.
    C'est une pratique qu'il convient de ne pas encourager (programmation défensive).

    En conclusion:
    Soyons moderne,
    Faisons un minimum confiance au GC,
    Ne payons pas pour ce dont on a pas besoin.

    Pour rappel:
    Le GC fonctionne sur le principe du comptage de références.
    Lorsqu'une variable est instanciée, le compteur de références est incrémenté.
    Lorsqu'une variable sort de la portée courante, le compteur de références est décrémenté.
    Lorsqu'une variable est affectée à Nothing, le compteur de références est décrémenté.
    Lorsque le compteur de référence atteint zéro, la variable est effectivement détruite.

    Je vous invite également à lire cet article de Microsoft, qui avance d'autres arguments:
    https://learn.microsoft.com/en-us/ar...cts-to-nothing

  2. #2
    Membre chevronné
    Inscrit en
    Avril 2008
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 270
    Par défaut
    Bonjour deedolith,

    Merci pour cette info et la lecture fournie
    Il va falloir que je change mes (vieilles) habitudes...

    Bonne journée

Discussions similaires

  1. [WinForms]limiter les instances d'une appli (calculatrice windows)
    Par khamett dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 23/11/2006, 12h50
  2. [c#] communiquer entre les instances d'une appli
    Par damned3 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/10/2006, 10h32
  3. Différencier les instances d'une même application
    Par Laurent.B dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 4
    Dernier message: 19/09/2006, 16h00
  4. Réponses: 1
    Dernier message: 20/07/2006, 15h21
  5. Connaitre toutes les instances d'une classe
    Par miniseb dans le forum Langage
    Réponses: 14
    Dernier message: 09/01/2006, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo