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 :

Chargement d'un DataGriedView très lent


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Chargement d'un DataGriedView très lent
    Bonjour,
    Problème cité maintes et maintes fois, cependant, je n'ai pas trouvé de solution satisfaisante dans mes essais :
    Je fais une requête SQL de chargement des factures d'une période (~11000 lignes) qui est très rapide (1 seconde), mais lorsque j'affecte la datatable au datasource du datagried, ça met des plombes (plusieurs minutes)...
    Pourquoi ? Y-a-t-il une propriété du Datagried à modifier ?
    Merci.

    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
      Public Function GetFactures(ByVal sTypeFact As String, ByVal dDeb As Date, ByVal dfin As Date) As DataTable 
        Dim oSQLCnx As New SqlConnection
        Dim oSQLCde As New SqlCommand
        Dim daListe As New SqlDataAdapter
        Dim sSQL As String
        Dim dtListe As New DataTable
     
        oSQLCnx.ConnectionString = m_sCnx
        oSQLCnx.Open()
     
        sSQL = String.Format("SELECT F.NumFact 'N°Facture',... " )
        oSQLCde.CommandText = sSQL
        oSQLCde.Connection = oSQLCnx
        daListe.SelectCommand = oSQLCde
        daListe.Fill(dtListe)
        oSQLCnx.Close()
        Return dtListe
      End Function
     
      Private Sub btnHTNat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHTNat.Click
        Me.Cursor = Cursors.WaitCursor
        frmDetail.Show()
        frmDetail.dgvDetail.SuspendLayout()
        frmDetail.dgvDetail.DataSource = GetFactures("NATIONAL", dtpDeb.Value.Date, dtpFin.Value.Date) ' <===== Ligne bloquante 
        frmDetail.dgvDetail.ResumeLayout()
        frmDetail.Text = "Détail des factures 'NATIONAL' du " & dtpDeb.Value.Date & " au " & dtpFin.Value.Date
        Me.Cursor = Cursors.Default
      End Sub

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Je me rappelle avoir constaté ce type de problème il y a quelques années lorsqu'on utilisait des Framework antérieurs au 3.5 : l'upgrade du Framework resolvait le problème.

  3. #3
    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
    le datagridview a une propriété VirtualMode à utiliser quand on met beaucoup de chose dedans

    quand cette propriété est activée, le datagridview créé beaucoup moins de chose, et demande les valeurs à afficher pour les cellules visible au fur et à mesure qu'elles sont affichées
    ce qui décuple les performances (pas des milliers d'instances de lignes et de cellules à créer)
    par contre ca demande de coder un peu plus, entre autres l'évènement qui demande pour la cellule x.y la valeur (CellValueNeeded), c'est à toi de chercher dans tes données (ca doit être faisable avec un datatable quand même)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Il doit y avoir un problème (mais où ?), car, j'ai repris mon code avec VS2012 et FrameWork 4.5, c'est encore pire !!! (100 secondes au lieu de 20). Je ne comprends pas ce que le DataGridView trifouille pour juste afficher 100 lignes d'une seule colonne ! Je vais essayer de reprendre un cas d'école !

  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
    il faut exécuter quelque chose plusieurs fois pour avoir un temps valable
    les bases de données mettent en cache des données, la 1ère exécution est toujours plus longue (ca peut etre des secondes)
    la code .net est compilé à chaque exécution, le 1er appel est toujours plus long (le temps est en millisecondes en général)

    après si tu mets 11k lignes dans un datatable et que tu donnes ce datatable à un dgv, certes quelques lignes seront dessinées, mais elle seront toutes instanciées (datagridviewrow, datagridviewcell, cellstyles etc...) et c'est là que ca peut prendre du temps


    windows forms est "abandonné" depuis le framework 3.5 donc le dgv n'a pas pu évoluer après
    à partir du framework 4 la clr change certes, mais je ne pense pas que ca influx beaucoup sur le dgv
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Problème résolu !
    Après avoir remplacé le contrôle DataGridView, j'ai récupéré les performances, j'ai donc comparé les propriétés... et j'ai trouvé le coupable !
    La propriété "RowHeadersWidthSizeMode" avait la valeur AutoSizeToAllHeaders, je l'ai passé à EnableResizing (ou autres), et ça va beaucoup mieux !!!.
    ça peut aider à l'occasion, car l'effet est immédiat !
    Bye

  7. #7
    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 vrai que le calcul des tailles quand il sur "toutes les lignes" prend énormément de temps (mesure de chaque string de chaque colonne)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. TabControl: chargement trés lent
    Par abdallah2007 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/03/2009, 18h41
  2. [CKEditor] Chargement du module FckEditor très lent
    Par romfauch63 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 18/06/2008, 03h05
  3. Chargement de la page principale très lent
    Par crapouye dans le forum ASP.NET
    Réponses: 3
    Dernier message: 21/02/2008, 17h00
  4. chargement très lent de ma page index
    Par stars333 dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2007, 13h36

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