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 :

Liaison de donnée à combobox prend beaucoup de temps.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut Liaison de donnée à combobox prend beaucoup de temps.
    Bonsoir à tous,

    J'ai développé dernièrement une application qui doit lier un combobox à une table contenant beaucoup de résultat afin de proposer des résultats (rien de bien spécial)
    Le rapatriement des données se fait très vite malgré la grosseur de la table.
    C'est à la liaison entre la table et le combobox que ca prend énormément de temps.
    Voici le code incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            CBDossierCourrier.AutoCompleteMode = AutoCompleteMode.Append
            CBDossierCourrier.DropDownStyle = ComboBoxStyle.DropDown
            CBDossierCourrier.AutoCompleteSource = AutoCompleteSource.ListItems
     
            donneDossierCourrier = New ClassDonneeDossiersCourrier(connSQLServer)
            debug.writeLine("Chargement de la table.")
            donneDossierCourrier.chargeTable()
            debug.writeLine("Liaison table / comboBox")
            CBDossierCourrier.DataSource = donneDossierCourrier.table 
            debug.writeLine("Fin liaison table / comboBox")
     
            CBDossierCourrier.ValueMember = "NumInterne"
            CBDossierCourrier.DisplayMember = "Libelle"
    j'obtiens donc dans la console de vs :
    Chargement de la table.
    Liaison table / comboBox
    --- Plus de 30 secondes. ---
    Fin liaison table / comboBox
    Je me demandais donc si il n'y avait pas moyen de lier une table au comboBox de manière à ce que ca soit plus rapide?

    Pour cette application j'avais bidouillé un système sur les évènements keyDown et keyUp afin de n'activer la liaison que quand l'utilisateur tape 3 lettres avec un like sur la bd (moins de données à lier, donc plus rapide).
    Ca fonctionne mais le code n'est vraiment pas top et je suis sur qu'il y a moyen de faire mieux...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre, j'ai jamais vu ça... il y a combien d'items dans ta table ?

    Est-ce que tu as essayé de désactiver l'auto-complete pour voir si c'est lié à ça ?

    Comment est implémenté l'accès aux données ? ADO.NET ? Linq to SQL ? EF ? Si c'est du Linq, attention : l'exécution est différée. Si tu écris une requête Linq, elle n'est exécutée que quand tu commences à parcourir les résultats (sauf si tu utilises ToList ou ToArray, par exemple). Donc en fait, selon ton implémentation, c'est possible que la récupération effective des données ne se fasse que quand tu bindes la DataSource du combo...

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Il y a environ 70.000 enregistrements.
    J'utilise ADO.NET avec une requête des plus simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NumInterne, Libelle from table
    Je vais essayer d'enlever l'auto-complete pour voir si ca change quelque chose...

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Il y a environ 70.000 enregistrements
    En même temps, à quoi ca sert d'en afficher autant? Qui lit 70k enregistrement?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Il y a environ 70.000 enregistrements.
    J'utilise ADO.NET avec une requête des plus simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NumInterne, Libelle from table
    Je vais essayer d'enlever l'auto-complete pour voir si ca change quelque chose...
    70000 ça fait beaucoup quand même... surtout qu'il n'y a pas de virtualisation dans un ComboBox (contrairement au DataGridView par exemple)

    Citation Envoyé par PitMaverick78 Voir le message
    En même temps, à quoi ca sert d'en afficher autant? Qui lit 70k enregistrement?
    Personne, apparemment le but est de compléter automatiquement la saisie de l'utilisateur.

    D'ailleurs, si c'est juste pour l'autocomplete, tu peux pas utiliser une TextBox avec AutoCompleteSource = CustomSource à la place ?

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Personne, apparemment le but est de compléter automatiquement la saisie de l'utilisateur.
    Ca m'apprendra à lire en diagonale

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

Discussions similaires

  1. [2008R2] script qui prend beaucoup de temps
    Par my_diva dans le forum Développement
    Réponses: 7
    Dernier message: 20/01/2014, 17h48
  2. Extraction qui prend beaucoup de temps
    Par khadija30 dans le forum SSIS
    Réponses: 14
    Dernier message: 14/05/2013, 17h12
  3. Fermeture de StreamReader prend beaucoup de temps?
    Par Lebbihi dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/08/2009, 23h57
  4. Réponses: 7
    Dernier message: 10/03/2009, 19h02
  5. do while prend beaucoup de temps
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/07/2008, 22h58

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