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

Windows Forms Discussion :

Lenteur DATAGRIDVIEW : optimisation?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Lenteur DATAGRIDVIEW : optimisation?
    Bonjour à tous !

    J'ai comme projet de faire un outil de reporting en récupérant des logs de 3 pages web (les 3 sont basées sur le même principe)

    Ces pages web sont présentées comme ceci :

    NomCol1~NomCol2~NomCol3~...~NomColn~
    bla~blabla~blibli~blublu~lala~
    ...

    j'ai donc crée un datatable qui réceptionne les titres des colonnes, j'ai splitté les '~', .... jusqu'à arriver à mon résultat final : Afficher la page dans un DGV.
    Pour une des pages web, il y a un peu plus de 6.000 lignes pour 12 colonnes, et cela met un temps FOU à s'afficher (environ 8 minutes d'attente...).

    Que me conseillez-vous pour optimiser mon DGV?

    Merci d'avance pour vos idées d'optimisation & votre aide sur ce sujet

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par darkos77 Voir le message
    Que me conseillez-vous pour optimiser mon DGV?
    Tu es sûr que c'est l'affichage dans le DGV qui est la cause du problème, et pas plutôt l'extraction des données ? Parce que 6000 lignes sur 12 colonnes, c'est pas un volume énorme...

    Tu lies le DGV à la DataTable, ou tu crées les lignes manuellement ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Je lie le DGV :

    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
     
    Sub base()
     
            Dim dTablePostes As DataTable = New DataTable
            Dim BDD_srv As String
            BDD_srv = GetHTMLSource(sHost, sPage) 'on récupère la page web recherchée en fonction d'une combobox
     
            Dim valString() As String
     
            valString = Split(BDD_srv, Chr(10))
     
            Dim tilString() As String
     
            tilString = Split(valString(0), "~")
     
            For i = 0 To tilString.Length - 2
     
                Dim oDataC As New Data.DataColumn
     
                oDataC.Caption = tilString(i)
                oDataC.ColumnName = tilString(i)
                oDataC.DataType = System.Type.GetType("System.String")
     
                dTablePostes.Columns.Add(oDataC)
     
            Next
     
            For i = 1 To valString.Length - 2
     
                tilString = Split(valString(i), "~")
                Dim oDataR As Data.DataRow = dTablePostes.NewRow
     
                For j = 0 To tilString.Length - 2
     
                    oDataR.Item(j) = tilString(j)
     
                Next
     
                dTablePostes.Rows.Add(oDataR)
            Next
     
            DataGridView1.DataSource = dTablePostes
     
        End Sub
    Comme je débute, j'ai sans doute mal optimisé mon code ?

    Merci pour l'aide

  4. #4
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre, je vois pas trop ce qui peut prendre tant de temps...

    Il faudrait faire un petit profiling pour voir où ça bloque; essaie de mettre des Debug.Print en indiquant l'heure à différents endroits de ce code, par exemple :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    Debug.Print("{0} - Avant GetHTMLSource", DateTime.Now)
    BDD_srv = GetHTMLSource(sHost, sPage) 'on récupère la page web recherchée en fonction d'une combobox
    Debug.Print("{0} - Après GetHTMLSource", DateTime.Now)
    ...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    03/11/2013 17:05:32 - Avant GetHTMLSource
    ...
    03/11/2013 17:08:50 - Après GetHTMLSource

    03/11/2013 17:08:50 - Début Sub
    ...
    03/11/2013 17:08:50 - Fin Sub

    03/11/2013 17:08:50 - Début Affichage
    ...
    03/11/2013 17:08:50 - Fin Affichage


    Donc la lenteur provient donc de la lecture de ma page HTML :/

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bon, ben j'ai plus qu'à me mettre une progress bar ^^'

    Pour éviter d'attendre longtemps à chaque fois que je sélectionne ma table lente, est-il possible de la stocker en mémoire, de sorte à la charger une seule fois tant que l'exe est ouvert?

    En tout cas, merci beaucoup pour l'aide !

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par darkos77 Voir le message
    Bon, ben j'ai plus qu'à me mettre une progress bar ^^'
    Bah y a peut-être moyen d'optimiser le code qui charge la page... ça me semble quand même bizarre une page qui met plusieurs minutes à charger. Si tu charges la page dans le navigateur, c'est aussi lent ? Fais voir le code que tu utilises pour charger la page.

    (cela dit ça reste judicieux de mettre une progress bar, parce que ce sera jamais instantané...)

    Citation Envoyé par darkos77 Voir le message
    Pour éviter d'attendre longtemps à chaque fois que je sélectionne ma table lente, est-il possible de la stocker en mémoire, de sorte à la charger une seule fois tant que l'exe est ouvert?
    Oui, il suffit de stocker la DataTable dans un champ (variable de classe). Difficile d'être plus précis sans savoir comment est structuré ton code...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    C'est pas aussi lent quand je charge le code via la page web.

    Voici le code :

    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
     
        Public Function GetHTMLSource(ByVal sHost As String, ByVal sPage As String, Optional ByVal sPort As String = "80") As String
     
            Dim Client As New WebClient()
            sHost = "url du Host"
            If ComboBox1.Text = "Postes" Then
                sPage = "/Gen/gettable.aspx?table=nomtablePostes"
            ElseIf ComboBox1.Text = "Serveurs" Then
                sPage = "/Gen/gettable.aspx?table=nomtableServ"
            ElseIf ComboBox1.Text = "Migration" Then
                sPage = "/Gen/gettable.aspx?table=nomtableMigration"
                GetHTMLSource = "ERROR"
            End If
     
            Dim sUrl As String = "http://" + sHost + sPage
            If sUrl = "" Then Exit Function
            If InStr(sUrl, " ") Then sUrl = Replace(sUrl, " ", "%20")
     
            Try
                Dim Data As Stream = Client.OpenRead(sUrl)
                Dim Reader As New StreamReader(Data)
                Dim S As String = Reader.ReadToEnd()
     
                Console.WriteLine(S)
                Data.Close()
                Reader.Close()
                GetHTMLSource = S
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
        End Function

  9. #9
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre, je vois pas trop ce qui fait que c'est lent... essaie d'enlever le Console.WriteLine ; ça peut paraitre bête, mais si le texte à afficher est très long c'est possible que ça prenne du temps

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    j'ai retiré la ligne et en effet, le fait d'utiliser le Writeline lui prennait trop de temps !

    03/13/2013 14:04:08 - Avant GetHTMLSource
    ...
    03/13/2013 14:04:09 - Après GetHTMLSource

    03/13/2013 14:04:09 - Début Sub
    ...
    03/13/2013 14:04:09 - Fin Sub

    03/13/2013 14:04:09 - Début Affichage
    ...
    03/13/2013 14:04:09 - Fin Affichage

    La prochaine fois je m'en souviendrait ! ^^

    Un GRAND merci à toi !

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

Discussions similaires

  1. [DataGridView] lenteur incompréhensible dans un petit code
    Par AsPrO dans le forum Windows Forms
    Réponses: 21
    Dernier message: 26/06/2008, 15h03
  2. datagridview lenteur avec base de donne
    Par Julien666 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/01/2008, 10h55
  3. Lenteur requête avec 17 LEFT JOIN. Comment l'optimiser?
    Par spitou_77 dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/10/2007, 16h44
  4. [CR XI]Lenteur de l'apercu- optimisation ?
    Par arthenius dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 13/06/2006, 14h37
  5. Optimiser MS SQL2000 car j'ai des problèmes de lenteurs
    Par djavaux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2004, 10h50

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