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 :

Lenteur remplissage DataGrid avec une BDD Access


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut Lenteur remplissage DataGrid avec une BDD Access
    Bonjour à tous,
    Je rencontre un problème de lenteur sur une petite application qui utilise une BDD Access. La BDD contient une seule table avec une soixantaine de colonnes et pour l'instant un peu plus de 1000 lignes. Le fichier Access est stocké et partagé en réseau.
    Au départ j'ai utilisé une connexion de données avec DataSet, DataTableAdapter et BindingSource. Le remplissage du DataGrid prenait plus de 20s.
    J'ai testé en déplaçant le fichier en local sur le SSD de ma machine : Pas d'améliorations notables.
    Dans Access la basse fonctionne sans lenteur. Une opération de tri s'effectue instantanément.

    Enfin j'ai supprimer ma source données pour gérer tout cela dans le code. En m'inspirant du cours : http://plasserre.developpez.com/cour...ees2#LXVII-F-2

    J'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Dim Connection_Access As New OleDbConnection
        Dim Chaine_connection_Access As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MonFichier.accdb;Jet OLEDB:Database Password=MonMDP"
        Dim Commande_Access_Proposition_articles As New OleDbCommand("SELECT * FROM Proposition_articles ORDER BY ID;", Connection_Access)
        Dim DataAdapter_Proposition_articles As New OleDbDataAdapter(Commande_Access_Proposition_articles)
        Dim DataSet_Proposition_article As New DataSet
     
        Sub MAJ_Datagrid()
            Connection_Access.ConnectionString = Chaine_connection_Access
            Connection_Access.Open()
            DataAdapter_Proposition_articles.Fill(DataSet_Proposition_article, "Proposition_articles")
            Formulaire_principal.DataGridView_Principal.DataSource = DataSet_Proposition_article.Tables("Proposition_articles")
        End Sub
    Le résultat est de 18s pour remplir le Datagrid. Un tri dans le DataGrid prend un temps comparable.
    J'ai également essayé avec une BindingSource mais le résultat est similaire.

    Quelles erreurs ai-je commise pour obtenir une lenteur pareille ?

    Merci de votre aide.
    Bonne journée.
    Merci de ainsi que d'utiliser les boutons et

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    dataset et dataadapter sont connus pour être peu performants

    néanmoins c'est assez étrange, je viens de créer une table avec 60 colonnes nvarchar et 1200 lignes
    j'ai 150ms sur le .fill
    et 300ms sur le set du datasource

    donc moins d'une demie seconde ...


    tu as modifié quelque chose sur le datagridview ?
    (System.Diagnostics.Stopwatch pour chronométrer)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut Merci Polo !
    Citation Envoyé par Pol63 Voir le message
    tu as modifié quelque chose sur le datagridview ?
    Super Merci,
    Après plusieurs tests il s'agit des propriétés suivantes :
    AutoSizeColumnsMode et AutoSizeRowsMode de AllCells a DisplayedCells

    Je suis passé de 18s à 0,5s. Soit 36 fois moins !!!

    Citation Envoyé par Pol63 Voir le message
    dataset et dataadapter sont connus pour être peu performants ?
    Tu conseilles donc quel moyen ?

    Merci.
    Merci de ainsi que d'utiliser les boutons et

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par r.morel Voir le message
    Après plusieurs tests il s'agit des propriétés suivantes :
    AutoSizeColumnsMode et AutoSizeRowsMode
    maintenant que tu le dis j'avais fait le même constat à l'époque, après avoir cherché un peu ^^
    le mieux est de faire l'autosize une seule fois à la fin du remplissage, enfin ca remonte à loin, mais il y a moyen d'avoir de l'autosize sans perte de perf visible


    Citation Envoyé par r.morel Voir le message
    Tu conseilles donc quel moyen ?
    rien de bien simple
    tu n'as pas l'air d'être développeur donc je te donne l'autorisation de rester sur le dataset
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Oui effectivement. Merci de ton autorisation.
    Je suis plutôt développeur du dimanche.

    Juste pour par curiosité quelle serait une des solutions ?

    Merci.
    Merci de ainsi que d'utiliser les boutons et

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    datatable est une classe de stockage des données
    dataset doit être un truc qui peut contenir plusieurs datatable
    daadapter est un truc qui peut s'occuper de générer les requetes de mises à jour d'un dataset/datatable

    donc stocker ca dans ses propres classes avec moins de fioriture (utiliser le dbdatareader qui permet de lire les données d'un select)
    faire soit même les requetes de mise à jour etc...
    mais bon c'est beaucoup plus de boulot pour légèrement plus de performances et plus de souplesse

    même entity framework doit être mieux que le dataset
    c'est un truc encore plus pratique, et peut etre plus simple, ca te génère du code en fonction de ta base de données et ca génère aussi les requetes (mais pas à l'exécution comme le daadapter)
    et après tu manipules des classes et des collections, donc le code est simple et facile à lire (après si c'est pour mettre dans un dgv ca doit revenir un peu au même)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Remplissage DATAGRID avec une requete et pas la table
    Par nabileon dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/02/2013, 21h13
  2. [AC-2003] Creer un .exe avec une BDD access
    Par paleronel dans le forum Runtime
    Réponses: 1
    Dernier message: 15/10/2012, 15h49
  3. Probleme de sync avec une BDD Access
    Par Hamza dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/11/2011, 07h29
  4. remplissage d'un fichier excel avec une table access
    Par lupus83 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/08/2007, 15h24
  5. Tableau avec résultat SQL d'une BDD Access
    Par Courgette17 dans le forum JDBC
    Réponses: 4
    Dernier message: 24/04/2007, 12h24

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