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" ).
Questions/solutions :
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
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.
Partager