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 :

[vb-net]question sur la gestion d'objet


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut [vb-net]question sur la gestion d'objet
    Bonjour,

    Je me posais une question sur la gestion de la vie d'un objet dans mon application.

    J'effectue un certains nombre de requêtes vers une base de donnée et je traite le resultat comme suis :

    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
    30
    Public Sub PS_Select_Absence_Type_Abbreviation()
            Dim monDataAdapter As New SqlDataAdapter
            Dim monDataSet As New DataSet
            Dim maDataTable As New DataTable
            Dim locAbsTypeTmp As New ArrayList()
     
            Try
                Using maCnx
                    maCmd = maCnx.CreateCommand
                    maCmd.CommandType = CommandType.StoredProcedure
                    maCmd.CommandText = "PS_Select_Absence_Type_Abbreviation"
     
                    monDataAdapter.SelectCommand = maCmd
                    monDataAdapter.Fill(maDataTable)
                End Using
     
                For ligne = 0 To maDataTable.Rows.Count - 1
                    locAbsTypeTmp = New ArrayList()
                    locAbsTypeTmp.Add(maDataTable(ligne)(0))
                    locAbsTypeTmp.Add(maDataTable(ligne)(1))
                    reqAbsAbbrev.Add(locAbsTypeTmp)
                Next
     
            Catch ex As Exception
                MsgBox("erreur retournée : " & ex.ToString)
                LogErreur("erreur retournée : " & vbCrLf & " fonction PS_Select_Absence_Type_Abbreviation " & ex.ToString)
                erreurPretraitement = False
            End Try
     
        End Sub
    Ici pour chaque ligne de resultat de ma requête je crée une nouvelle instance de mon objet locAbsTypeTmp .
    Je stock ensuite mes valeurs.
    Et j'insere ensuite cette instance de mon objet dans ma collection de resultat.

    Ma question est la suivante, pour bien programmer en objet pour chaque new il devrait y avoir un dispose.

    Je voulais savoir si pour chaque tour de boucle je peux/dois faire un dispose sur locAbsTypeTmp une fois que j'ai inséré les valeurs dans reqAbsAbbrev?

    Je suis preneur de toutes remarques et observation.

    Merci d'avance

    ++

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    pour ce qui est de dispose, .net intègre 2 types de choses en ram, ce qui est managé et non managé
    managé = géré par .net (par la clr plus exactement)

    managé :
    un string, un integer, une collection, une classe contenant que des types managés etc...
    ces choses là quand tu les utilises plus, elles sont marqués comme plus utilisés et le garbage collector (appelé GC) effacera la mémoire qu'ils prenaient automatiquement (mais pas immédiatement)

    non managé :
    certaines classes utilisent des choses non managés comme les controles, les forms, les connexions aux bases de données, les images, fonts, brushes etc ...
    les images par exemple (system.Drawing.image, system.Drawing.bitmap ...) ne sont que des pointeurs vers des images gérées par l'OS
    donc ces classes implémentent l'interface IDisposable et la méthode Dispose
    quand tu instancies une image, ca appelle une dll de windows pour lui dire de créée l'image et son espace mémoire
    quand tu appelles la méthode dispose, ca appelle une dll de windows qui libère (immédiatement) la mémoire gérée par l'OS (une partie de la mémoire de ces classes est quand meme gérée par .net comme les propriété width et height, c'est le GC qui s'en occupe)
    les connexions c'est pareil, c'est pas codé en .net mais en COM

    (pour info une grosses partie du framework est codée en .net, le reste c'est souvent de l'appell d'API (= dll de windows))
    si tu oublies d'appeler dispose, le GC le fera mais c'est quand meme conseillé de le faire soi meme
    using appelle dispose automatiquement


    dans ton cas un arraylist est managé donc tu ne peux pas le disposer
    par contre si dedans tu stockes des choses disposables c'est en théorie à toi d'appeler dispose sur ces éléments quand tu n'en as plus besoin


    de plus ton locAbsTypeTmp tu le mets dans un autre objet, donc si tu dispose locAbsTypeTmp c'est comme si tu disposais celui que tu as mis dans reqAbsAbbrev
    car il faut aussi comprendre la notion de type par référence (en opposition aux types par valeurs)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut
    Bonjour,

    Et merci pour ta réponse.

    Oui donc vaut mieux pas que je dispose un objet que je veux pouvoir consulter dans ma collection reqAbsAbbrev.

    Le using je l'utilise pour la requête pour bien fermer la connexion après récupération des données.

    car il faut aussi comprendre la notion de type par référence (en opposition aux types par valeurs)
    Ouaip et j'ai encore du mal à ce niveau.

    ça va rentrer à force .

    ++

Discussions similaires

  1. question sur la gestion objet GTK
    Par Christophe dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/09/2011, 13h54
  2. Question sur la gestion des objets métier
    Par viddak dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/11/2008, 07h06
  3. [VB.NET] Question sur le deploiement
    Par TONY44 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 22/10/2004, 09h28
  4. [VB.NET] Question sur le pilotage d'Excel
    Par alfprod dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/10/2004, 15h15
  5. [VB.NET] Question sur liaison VB et Access
    Par Hoegaarden dans le forum Accès aux données
    Réponses: 2
    Dernier message: 18/05/2004, 09h35

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