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 :

Lecture de table avec plein d'enregistrements


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut Lecture de table avec plein d'enregistrements
    J’ai une table avec plein d'enregistrements, je commence par faire une connexion à la base et après je lis tout les enregistrements de la table
    le problème comme la table est grande ca prend 17 seconde

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      While reader.Read()
        If Not IsDBNull(reader("no_auteur")) Then item.SubItems(1)  = reader("no_auteur")
        If Not IsDBNull(reader("auteur")) Then item.SubItems(2) = reader("auteur")
        If Not IsDBNull(reader("editeur")) Then item.SubItems(3) = reader("editeur")
     End While
    voila y a t il moyen d'aller plus vite !!!

  2. #2
    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
    ca depend de ce que tu fais
    17 seconde ca voudrait dire sur un pc récent, environ 80000 lignes sur une cinquantaine de colonnes

    si ce n'est pas ton cas c'est qu'il y a moyen d'aller plus vite
    qu'est-ce que ton objet item ?
    si c'est un objet graphique c'est ca qui ralenti. dans ce cas là cherche sur cet objet une méthode qui commence par begin et qui sert à dire qu'on est entrain de le remplir, qu'il arrete de s'amuser (cas des datagridview et autre listview)
    et à la fin du fait endmachin pour dire que c'est fini

    tu peux aussi faire ca en asynchrone sur un autre thread si réellement t'as beaucoup de données car dans ca cas là y aura pas moyen d'aller plus vite
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    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
     
    Try
                Dim item As MSComctlLib.ListItem
                ListAffichage.ListItems.Clear()
                'remplissage de la liste des auteurs
     
                command.Connection = Depart.ConnectionBdNet
                command.CommandText = "SELECT * FROM laut ORDER BY no_auteur"
                reader = command.ExecuteReader()
     
     
     
                temps.Start()
                While reader.Read()
                    item = ListAffichage.ListItems.Add
                    If Not IsDBNull(reader("no_auteur")) Then item.SubItems(1) = reader("no_auteur")
                    If Not IsDBNull(reader("auteur")) Then item.SubItems(2) = reader("auteur")
                    If Not IsDBNull(reader("editeur")) Then item.SubItems(3) = reader("editeur")
                End While
                temps.Stop()
                MessageBox.Show("Tps écoulé :" & temps.Elapsed.ToString())
                reader.Close()
    c'est en mode debug qui prend 17 secondes
    NB : la table a 3000 enregistrements

  4. #4
    Membre éprouvé Avatar de agueffier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 93
    Par défaut
    D'où vient ce délais ?

    Est-ce l'exécution de la requète ou bien lorsque tu parcours l'objet reader ?

    Si c'est la requète, l'ajout d'un index peut aider !

  5. #5
    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
    j'arrive à remplir une grille avec 1000 lignes en 0,3s avec un reader ...

    qu'est-ce que ce MSComctlLib ? un objet graphique ? si non, alors il n'est pas aproprié !



    Citation Envoyé par agueffier Voir le message
    Est-ce l'exécution de la requète ou bien lorsque tu parcours l'objet reader ?
    un executereader meme sur une table géante est rapide, c'est la parcours du reader qui prend du temps

    Citation Envoyé par agueffier Voir le message
    Si c'est la requète, l'ajout d'un index peut aider !
    un index sur un select * ne changera rien
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    temps.Start()
                While reader.Read()
                   'lecture et ecriture
                End While
    temps.Stop()
    c'est la boucle qui prend 17 seconde

  7. #7
    Membre éprouvé Avatar de agueffier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 93
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    un index sur un select * ne changera rien
    Autant pour moi, j'avais pas regarder la requète

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    avec le .exe ca prend 0,7 seconde
    mais comme je travaille en mode debug c'est long, donc s'il y a possibilité d'aller plus vite en mode debug sinon je prendrais mon mal en patience

    Si vous ppouvez me dire aussi pourquoi une telle difference entre le mode debug et avec le.exe 17s >>> 0,7

  9. #9
    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
    ca ne reponds à ma question de quel est l'objet étrange que tu utilises

    sinon jete un oeil aux options de compilation et de debug de ton projet y a ptete un truc à modifier pour gagner du temps quand meme
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    c'est pas l'objet qui fait retarder, j'ai essayer ce code et ca prend aussi 17s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim no_auteur_string As String
     
    temps.Start()
                While reader.Read()
                    no_auteur_string = reader("no_auteur")
                End While
    temps.Stop()

  12. #12
    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
    c'est vraiment étrange quand meme
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [AC-2010] Export vers excel d'une table avec + de 65000 enregistrements
    Par CmzxNene dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/11/2012, 06h16
  2. Problème lecture de tables avec données type Oui/non
    Par Alixe80 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2008, 18h44
  3. Réponses: 1
    Dernier message: 03/03/2008, 15h20
  4. dernier enregistrement créé d'une table avec dbexpress
    Par deubal dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/01/2006, 12h16
  5. Réponses: 4
    Dernier message: 16/03/2004, 15h16

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