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 :

Application VBNET ralentie sur W7 [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut Application VBNET ralentie sur W7
    Bonjour à tous,

    Voilà je reviens vers vous pour un petit soucis avec mon application VBNET.
    Je recherche une raison qui peut faire que mon programme soit ralenti sur certains PC sous Windows 7.

    Certains PC tournant sous XP ont été remplacés par des tout nouveaux PC tournant sous Windows 7.
    On a constaté que lorsque l'utilisateur cliquait sur un bouton pour faire afficher un Form, celui-ci apparait après environ 8 secondes alors que sur d'autres PC, il faut environ 1 seconde.

    Avez-vous des pistes pour savoir ce qui se passe sur ces PC ?

    Merci d'avance pour votre future aide et vos futurs conseils.

  2. #2
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Bonjour,
    En premier lieu il faudrait expliquer (ou montrer le code) ce qui se passe au moment de l'ouverture du form, ça pourrait aiguiller vers la bonne raison.
    Ensuite, je pense que ça peut être un problème de version (32 ou 64 bits) ou encore au niveau des framework, bien que la compatibilité descendante est normalement pas un soucis (m'enfin windows quoi, on sait jamais).

  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
    j'aurais tendance à penser que ca vient de ton code, et tu es le seul à l'avoir ...

    sinon tu peux utiliser system.diagnostics.stopwatch (chronomètre) pour isoler la portion de code qui prend du temps
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Hello,

    Alors concernant le code, je ne l'ai pas changé. Je peux vous mettre un extrait si vous le voulez.
    J'ai par exemple un datagridview qui contient des données. Si l'utilisateur fait un clic-droit cela affiche un menu contextuel. Dans cet exemple, l'utilisateur choisit une option qui permettra d'afficher les données contenues dans le datagridview dans un form puis l'affiche. Voici un extrait :

    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
    45
    46
    47
    48
    Private Sub Menumodifier_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Menumodifier.Click
            Try
                If Me.Table1DataGridView.SelectedRows.Count > 0 AndAlso _
                           Not Me.Table1DataGridView.SelectedRows(0).Index = _
                               Me.Table1DataGridView.Rows.Count - 1 Then
     
                    Dim i As Integer
                    i = Table1DataGridView.CurrentRow.Index
     
                    If i <> -1 Then
                        Form2.dc.Text = Table1DataGridView.Item(1, i).Value.ToString
                        Form2.dc.Enabled = True
                        Form2.origine.Text = Table1DataGridView.Item(2, i).Value.ToString
                        Form2.destination.Text = Table1DataGridView.Item(3, i).Value.ToString
                        Form2.nombre.Text = Table1DataGridView.Item(4, i).Value.ToString
     
                        Form2.observation.Text = Table1DataGridView.Item(23, i).Value.ToString
                        If Table1DataGridView.Item(19, i).Value = "NON" Then
                            Form2.nonate.Checked = True 
                            Form2.dateate.Visible = False
                            Form2.Label21.Visible = False
                            Form2.Label16.Visible = False
                            Form2.ateok.Visible = False
                            Form2.Label23.Visible = False
                        End If
                        If Table1DataGridView.Item(19, i).Value = "OUI" Then
                            Form2.ouiate.Checked = True
                            Form2.dateate.Visible = True
                            Form2.Label21.Visible = True
                            Form2.Label16.Visible = True
                            Form2.ateok.Visible = True
                         End If
     
                        Form2.valider.Enabled = False
                        Form2.Missionmod.Enabled = True
                        Form2.Missionok.Enabled = True
                        Form2.Missionmod.Select()
                    End If
                Else
                    Exit Sub
                End If
     
            Catch ex As Exception
                MsgBox(Err.Description)
            End Try
            Form2.valider.Select()
            Form2.ShowDialog()
        End Sub
    Environ 8 secondes sur W7 et même pas 2 sur un XP.
    Concernant le Framework, l'appli était compilé avec la version 2. Même avec la 4, j'ai le même problème de lenteur jusqu'à ce que le Form2 apparaisse.

  5. #5
    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 ne vois rien qui explique le probklème de performance dans ton code.

    Teste si le problème se résoud quand on change le thème d'affichage en Windows classique (dans ce cas ce serait lié à la transparence).

    Mets un MessageBox.Show() juste avant le ShowDialog() pour vérifier que le problème survient au niveau du Form2.ShowDialog().
    Si c'est le cas comme je le crois, quels sont les events de la form qui pourraient être exécutés lors de l'activation de Form2() ?

  6. #6
    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
    Citation Envoyé par IL-MAFIOSO Voir le message
    Alors concernant le code, je ne l'ai pas changé.
    ca on s'en serait douté ^^


    la méthode de Graffito peut convenir aussi, le but c'est de trouver la ou les lignes qui prennent du temps


    sinon l'utilisation d'une form par son nom sans variable n'est pas recommandé, ca vient peut etre de là
    les controles non nommés c'est moche aussi (label21 et autres)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Hello,

    Concernant le nom de certains labels, c'est vrai que j'aurais pu les renommer....
    Sinon :

    - Si je bascule en affichage classique, cela ne change rien ....
    - J'ai mis un msgbox juste avant le Form2.Showdialog() et la msgbox apparait en moins d'une seconde .... mais le Form2 apparait toujours après plusieurs secondes.

    J'ai regardé du côté de l'event et effectivement je crois que le soucis vient de là :
    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
    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            origine.AutoCompleteMode = AutoCompleteMode.Suggest
            origine.AutoCompleteSource = AutoCompleteSource.CustomSource
            destination.AutoCompleteMode = AutoCompleteMode.Suggest
            destination.AutoCompleteSource = AutoCompleteSource.CustomSource
     
            Call connection7()
     
            Dim Cmd As OleDbCommand
            Dim Dr As OleDbDataReader
            Dim Cn As New OleDbConnection(base1 & base9)
     
            Try
                Cmd = New OleDbCommand("Select Gares from Suggestions", Cn)
                Cn.Open()
                Dr = Cmd.ExecuteReader
                While Dr.Read
                    origine.AutoCompleteCustomSource.Add(Dr.GetString(0))
                    destination.AutoCompleteCustomSource.Add(Dr.GetString(0))
                End While
                Dr.Close()
                Cn.Close()
            Catch ex As Exception
                MsgBox(Err.Description)
            End Try
     
        End Sub
    Comme vous le voyez, je me connecte à une BDD pour rapatrier une liste de mot qui seront suggérés lors de la saisie dans 2 textbox ...
    Y-a-t-il un moyen d'accélérer cette fonction ? Ou de changer la méthode ?

    Ce qui est drôle est que sur un PC sous XP, c'est plus rapide alors que les deux PC XP et Seven se connecte au même lecteur réseau .....

  8. #8
    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 ne faut pas tirer de conclusion hâtive ou hasardeuse

    vu que tu es parti sur les messagebox, mets en un au début de ce code et un à la fin pour être sûr que ca vient de là
    il faut isoler la ou les lignes qui mettent du temps, pas se dire ca doit venir de là
    et ton code appelle une méthode, il faut aussi si ce n'est pas là bas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Hello Pol63,

    D'accord avec toi. En fait j'ai testé en supprimant tout ce qu'il y a dans le le load du Form2 et l'affichage du Form2 est alors quasiment instantané.

    Le call connection7() sert juste à donner des valeurs aux variables base1 et base9.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    base1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "
            base9 = "C:\Users\Salvatore\Documents\config.mdb;Jet OLEDB:Database Password='coucou'"
    Je suis débutant ... j'avais pris cette méthode pour n'avoir à changer qu'une fois les chemins que j'utilise à différents endroits dans mon application. Cette méthode est dans un module.

    Le temps perdu est la partie try/end try lorsqu'il se connecte pour ajouter les noms dans les suggestions.

  10. #10
    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
    ne pas modifier AutoCompleteCustomSource dans une boucle peut etre
    c'est une habitude à prendre en windows forms, modifier le moins possible les controles en boucle
    car souvent quand on leur modifie un truc ils font quelque chose derrière, donc ca fait une réaction en chaine

    il faut donc préparer ce qu'on a à leur donner et leur donner en une fois, comme ca il ne font leur traitement qu'une fois

    donc dans le datareader tu utilises un list(of string), tu ajoutes tout tes string et après du fait AutoCompleteCustomSource = lelist
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Re,

    Merci pour tes commentaires
    Par contre je ne sais pas faire ce que tu suggères. Peut-tu me corriger le code du load de mon form2 afin que cela corresponde à ta suggestion ?

    Merci pour ta future aide.

  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
    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Dr = Cmd.ExecuteReader
    Dim l As New AutoCompleteStringCollection
    While Dr.Read
         l.Add(Dr.GetString(0))
    End While
    origine.AutoCompleteCustomSource = l
    destination.AutoCompleteCustomSource = l
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Re,

    Bon ben bravo Pol63, tu as visé dans le 1000

    Vraiment merci beaucoup. C'était bien le contenu de la boucle qui faisait problème et avec ton exemple, c'est parfait.

    Je classe le Topic comme résolu

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

Discussions similaires

  1. [VB.NET] Programmer une Application qui tourne sur un PDA?
    Par Bils dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/01/2006, 04h23
  2. Application en permance sur le bureau.
    Par deetox dans le forum Composants VCL
    Réponses: 11
    Dernier message: 27/08/2004, 00h44
  3. [VS.NET] Application asp1.1 sur IIS 5.1
    Par Estoril dans le forum Visual Studio
    Réponses: 8
    Dernier message: 02/05/2004, 17h10
  4. application qui connecte sur une page web
    Par spoolz dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2004, 09h47
  5. Réponses: 7
    Dernier message: 17/07/2003, 11h00

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