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 :

DataTable personnalisé > éxécution du code très lent


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut DataTable personnalisé > éxécution du code très lent
    Bonjour,

    Je viens vers vous car j'ai un problème de lenteur de traitement et je ne sais pas trop si cela est normal ou pas.
    Ce que je fais : je lance une requête sql qui me retourne le résultat dans un dataTable grâce auquel j'alimente une page web en ASP.NET vb.net.
    Jusque là, mon code fonctionne sans erreur.

    > Lorsque dans mon code source, je fais une requête normale en VB.NET pour obtenir un dataTable, c'est quasiment instantané.

    > Maintenant, pour aller un peu plus loin, je souhaite créer un dataTable manuellement afin de créer des colonnes et d'y insérer des valeurs personnalisées. En effet, je souhaite réaliser des traitements et vérifications en amont (avant insertion des données dans le dataTable), cela afin de faciliter le traitement dans mon code qui récupèrera mon dataset perso.

    Mon souci dans ce cas est flagrant. Mon code complet est rapide. mais dès que j'utilise le dataTable perso, le code est bien plus lent. la différence est de 3 à 4 secondes.

    Je voulais savoir si cela était normal ? Y-a-til un moyen d'optimiser cela ?
    Merci à tous par avance.

    Je vous donne mon code pour infos :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
        Private DT_SsFAMILLES As DataTable
        Private Sub DT_SsFAMILLES_CreateHeadersColumns()
            Dim workCol As DataColumn = DT_SsFAMILLES.Columns.Add("SousFamilleId", Type.GetType("System.Int32"))
            workCol.AllowDBNull = False
            workCol.Unique = True
            DT_SsFAMILLES.Columns.Add("SousFamilleNom", Type.GetType("System.String"))
            DT_SsFAMILLES.Columns.Add("IsNotEmpty", Type.GetType("System.Boolean"))
        End Sub
        Private Sub DT_SsFAMILLES_InsertRow(ByVal intId As Integer, ByVal strName As String, ByVal BoolNotEmpty As Boolean)
            Dim workRow As DataRow = DT_SsFAMILLES.NewRow()
            workRow("SousFamilleId") = intId
            workRow("SousFamilleNom") = strName
            workRow("IsNotEmpty") = BoolNotEmpty
            DT_SsFAMILLES.Rows.Add(workRow)
        End Sub
     
     
    	Public Function Load_SousFamilles(ByVal intIdFam As Integer) As Boolean
            ErreursTxt = ""
            Dim boolReturnValue As Boolean = False
            Try
                boolReturnValue = GetSsFams(intIdFam) 'effectue une requête sql qui remplie mon dataset DT1 avec des sous familles
                If ErreursTxt = "" Then
                    If boolReturnValue Then
                        Dim intId As Integer
                        Dim strName As String
                        Dim BoolNotIsEmpty As Boolean
                        DT_SsFAMILLES = New DataTable("ListeSsFams")
                        DT_SsFAMILLES_CreateHeadersColumns()
                        For i As Integer = 0 To intCptmax
                            intId = DT1.Tables(0).Rows(i)("SousFamilleId")
                            strName = DT1.Tables(0).Rows(i)("SousFamilleNom")
                            BoolNotIsEmpty = Verif_Sous_Famille_IsNotEmpty(intId) 'vérifie un critère et retourne True or false
                            DT_SsFAMILLES_InsertRow(intId, strName, BoolNotIsEmpty)
                        Next
                        DT1 = Nothing
                    End If
                End If
            Catch ex As Exception
                ErreursTxt = ex.ToString()
            End Try
            Return boolReturnValue
        End Function

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Bonjour,

    As-tu essayer de chronométrer le temps de chaque instruction pour trouver celle qui ralentit ton code avec un chrono du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim d_dep as Date = TimeOfDay
    'ton instruction
    Dim d_fin as Date = TimeOfDay
    Console.WriteLine((d-fin-d_dep).Milliseconds)
    (Code non testé)

    @+
    Mat

  3. #3
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par matll Voir le message
    Bonjour,

    As-tu essayer de chronométrer le temps de chaque instruction pour trouver celle qui ralentit ton code avec un chrono du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim d_dep as Date = TimeOfDay
    'ton instruction
    Dim d_fin as Date = TimeOfDay
    Console.WriteLine((d-fin-d_dep).Milliseconds)
    (Code non testé)

    @+
    Mat
    Bonne idée ! Non je ne l'ai pas fait car étant donné que le reste de mon code est le même sans le datatable perso, je n'ai pas pensé à vérifier cela...

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Tu peux essayer en ajoutant avant l'ajout des lignes l'instruction BeginLoadData en n'oubliant pas de faire un EndLoadData à la fin !

  5. #5
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Citation Envoyé par ostenhard Voir le message
    Bonjour,

    Tu peux essayer en ajoutant avant l'ajout des lignes l'instruction BeginLoadData en n'oubliant pas de faire un EndLoadData à la fin !

    Merci pour l'info, je ne connaissait pas cela.
    Je l'ai mis et à priori j'ai gagné un peu mais cela reste long (enfin, juste 2 à3 secondes encore).

    J'ai également chronométré les exécutions de chaque partie de mon code y compris dans les boucles et je n'ai pas noté de latence particulière. Donc à mon avis cela vient plutôt de ma requête SQL. Bizare ....

    Je vais donc voir du côté de SQL afin de savoir si je peux simplifier cela.

    Merci dans tous les cas pour votre aide.


  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    remplir un dataset pour ensuite remplir un datatable avec déjà c'est pas super logique ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [XL-2007] Code très lent
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/11/2011, 18h36
  2. [D2007] Achèvement de code très lent
    Par paradise dans le forum EDI
    Réponses: 8
    Dernier message: 07/10/2010, 13h06
  3. [XL-2003] Je sèche sur un code très très lent
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/07/2009, 17h18
  4. [E-00] Code Très Lent
    Par Scoubi7 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 10/06/2009, 20h21
  5. Code VBA très lent - en phase d'execution
    Par Fairyanna dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/08/2008, 15h35

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