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

VB.NET Discussion :

Usercontrol bitmap dispose [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut Usercontrol bitmap dispose
    Bonjour a tous,

    désolé par avance si cette question a du etre déjà posé un million de fois.
    Je progresse péniblement avec VB.Net.
    Je dois créer un UserControl.
    Pour l'instant il est vide lol.
    Mais je sais que je vais devoir utiliser une Bitmap pendant toute la vie de ce UserControl :

    Je sais aussi que je dois utiliser la méthode ".Dispose" pour liberer les ressources. Mais a quel moment et ou ?
    Dans un des evenements du UserControl ?

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Tu ne dois pas appeler Dispose toi-même.
    C'est le composant ou la fiche dans lequel tu places ton contrôle qui le fait.

    Par contre puisque c'est ton contrôle qui créé l'image, il doit procéder à sa destruction en implémentant IDisposable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Public Class BaseClassWithSafeHandle
        Implements IDisposable
     
     
        Dim Image1 As Image
     
        ' To detect redundant calls
        Private disposed As Boolean
     
     
     
        ' Public implementation of Dispose pattern callable by consumers.
        Public Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
     
        ' Protected implementation of Dispose pattern.
        Protected Overridable Sub Dispose(disposing As Boolean)
            If Not disposed Then
                If disposing  AndAlso Image1 IsNot Nothing Then
                    Image1.Dispose()
                    Image1 = Nothing
                End If
     
                disposed = True
            End If
        End Sub
    End Class

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut Dispose inutile
    Non, en VB.NET il existe un mécanisme automatique qui s'appelle le "Garbage Collector" qui permet de ne pas utiliser le .Dispose. Quand une réservation en mémoire est créé (par un new) le pointeur de cette Zone est inscrit dans une variable de l'application. Si cette variable disparait ou ne pointe plus sur cette zone réservé, le garbage collector va automatiquement libérer cette espace puisque l'application ne la référence plus.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    Citation Envoyé par emmanuel.walter Voir le message
    Non, ....
    il est surement inutile ici en effet, mais c'est souvent utile quand même ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Merci a tous pour toutes ces précisions

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Citation Envoyé par emmanuel.walter Voir le message
    Non, en VB.NET il existe un mécanisme automatique qui s'appelle le "Garbage Collector" qui permet de ne pas utiliser le .Dispose. Quand une réservation en mémoire est créé (par un new) le pointeur de cette Zone est inscrit dans une variable de l'application. Si cette variable disparait ou ne pointe plus sur cette zone réservé, le garbage collector va automatiquement libérer cette espace puisque l'application ne la référence plus.
    Ce n'est pas parce qu'une mécanique existe qu'il faut l'utiliser sans réfléchir !

    Le nettoyage par le Garbage Collector n'est pas automatique.
    Il se déclenche sous certaines conditions qui sont régulièrement remplies ce qui peut amener à penser que c'est automatique mais ce n'est pas le cas.
    Et le passage via GC n'est pas gratuit en terme de temps et de ressources.

    Plus de détails sur le GC à l'adresse ci-dessous :
    https://learn.microsoft.com/fr-fr/do...n/fundamentals

    En résumé tes images ne sont pas libérées immédiatement si tu attend le passage du GC.
    En plus, elles sont chargées par des contrôles utilisateurs, ce qui implique qu'il peut en exister un certain nombre.
    Toutes ces images prennent de l'espace et sont libérés uniquement lorsque GC a le temp de les traiter.
    Cela peut se révéler contraignant et contre-productif si tu as immédiatement besoin de ces ressources.

    Donc oui, VB.Net dispose du Garbage Collector mais non, attendre qu'il s'exécute tout seul n'est pas forcément une bonne idée.
    Le fait que tu charges des images qui nécessitent plus de ressource que le reste, combiné au fait que c'est un contrôle utilisateur qui fait cette opération, ce sont deux raisons pour lesquelles, il vaut mieux implémenter IDisposable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2002, 18h26
  2. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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