Au sujet de la méthode dispose()

tournevice Messages postés 10 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 26 décembre 2006 - 12 juil. 2006 à 13:35
tournevice Messages postés 10 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 26 décembre 2006 - 13 juil. 2006 à 14:55
Salut,

J'aurai voulut avoir un renseignement et des avis. Mon but serait d'implémenter une méthode dispose() pour permettre de désallouer proprement la mémoire occupée par chaque instanciation d'une classe que j'ai écrite, et qui utilise des objets ADO .NET pour se connecter à une base de données sql server 2000 et insérer, supprimer, mettre à jour des données dans la base. Cette classe dispose des champs suivant (suivis de méthodes pas intéressantes pour ce sujet) :

Public AgentID As New SqlClient.SqlParameter("@AgentID", SqlDbType.Int)
Public BrigadeID As New SqlClient.SqlParameter("@BrigadeID", SqlDbType.Int)
Public FonctionID As New SqlClient.SqlParameter("@FonctionID", SqlDbType.Int)
Public Visa As New SqlClient.SqlParameter("@Visa", SqlDbType.Image)

Je voulais savoir, d'une part, si l'implémentation de la méthode dispose(), dans mon cas, est judicieuse, ou s'il vaut mieux laisser faire le garbage collector. Dans le cas ou son implémentation serait une bonne chose, je me heurte à un petit problème. L'objet SqlClient.SqlParameter ne propose pas de méthode dispose. Ainsi, lorsque je veux le caster en IDisposable, lors de l'execution, .NET me dit que j'ai pas le droit de faire ce cast. Comment faire?

Voici mon code:

Private disposed As Boolean = False

Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not disposed Then
            If disposing Then
                If Not AgentID Is Nothing Then
                    CType(AgentID, IDisposable).Dispose()
                End If
                If Not BrigadeID Is Nothing Then
                    CType(BrigadeID, IDisposable).Dispose()
                End If
                If Not FonctionID Is Nothing Then
                    CType(FonctionID, IDisposable).Dispose()
                End If
                If Not Visa Is Nothing Then
                    CType(Visa, IDisposable).Dispose()
                End If
            End If
            disposed = True
        End If
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
    End Sub

2 réponses

cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
13 juil. 2006 à 10:06
Bonjour,

Le dispose n'est util que sur des composants non managés comme des composant COM par exemple.
Comme les formulaires contiennent des composants non managés on a une méthode dispose dessus.
Si tu crée une class elle est managée par défaut donc tu n'as pas besoins de faire une dispose sauf si elle contient des object COM.

Les objets .NET sont managés donc pas besoins

-- Pourquoi faire simple quand on peut faire compliquer --
0
tournevice Messages postés 10 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 26 décembre 2006
13 juil. 2006 à 14:55
Merci de ta réponse!
0
Rejoignez-nous