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 :

Méthode BindingSource.MoveNext trop lente


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut Méthode BindingSource.MoveNext trop lente
    Bonjour à tous, j'ai une procédure qui s’exécute depuis le Form.Load et qui fige l'affichage durant le temps de calcul de celle-ci.
    Cette procédure parcours toutes les lignes d'une DataTable au travers du Bindingsource, dans le but d'actualiser certaines données de la table.

    Cause du ralentissement :
    En plaçant plusieurs chronomètres dans le code j'ai trouvé la cause du ralentissement. Il s'agit de la méthode BindingSource.MoveNext qui prends 250ms (sur un PC Core2Duo) alors que le reste du code prends 10ms maxi. (Si j'ai 20 lignes ça fait donc 5s). J'ai vérifié, cette commande MoveNext ne lève aucun autre évènement, alors en cherchant un peu plus je me suis appercu que ce sont 2 controles DateTimePicker Bindé sur la propriété "Value" qui sont à l'origine de ce ralentissement. (En bidant sur la propriété "Text" ou en supprimant carrément les 2 liaisons de données ça va beaucoup mieux mais je souhaite rester bindé sur la propriété "Value" ).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub DataRefresh()
         For n = 0 To BindingSourceTaches.Count - 1
               Dim RowView As DataRowView = CType(BindingSourceTaches.Current, DataRowView)
               Dim Row As DataRow = RowView.Row
               Call CalculRowValues(Row) ' Fait des calculs pour actualiser certaines données de la Table. 
               Call WriteRowValues(Row)
               BindingSourceTaches.MoveNext() ' s’exécute en 250ms environ !!!
          Next
               BindingSourceTaches.MoveFirst()
    End Sub
    Questions/solutions :
    Avez vous une idée ? J'ai cherché une solution pour suspendre la liaison de données pendant le calcul mais j'ai pas trouvé. J'ai dans l'idée aussi de faire les calculs directement sur le DataTable mais comment parcourir la dataTable sans modifier la position courrante du Bindingsource ?

    Toutes idées ou aide sera la bienvenue.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    J'ai trouvé, c'était tout simple. Il y a des moments ou je cherche des complications là ou il y en a pas.
    Il suffisait de parcourir la Collections Rows de la DataTable. Résultat : 100ms pour exécuter l'ensemble de la procédure. Si on compare à 5s ça fait une sacré différence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub DataRefresh
           If dtTableProjets.Rows.Count > 0 Then
                Try
                    For i = 0 To dtTableProjets.Rows.Count - 1
                        Dim Row As DataRow = dtTableProjets.Rows(i)
                        Call CalculRowValues(Row, "RowChangingOnLoad")
                        Call WriteRowValues(Row, "RowChangingOnLoad")
                    Next
                Catch ex As Exception
                End Try
            End If
    End Sub

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

Discussions similaires

  1. Méthode isReachable beaucoup trop lente
    Par mcfly37 dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2010, 19h32
  2. Convolution trop lente...
    Par progfou dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 05/08/2006, 11h44
  3. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

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