cs_philcam
Messages postés132Date d'inscriptiondimanche 12 août 2001StatutMembreDernière intervention17 octobre 2008
-
21 juin 2008 à 14:34
cs_lexouille
Messages postés4Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention 2 octobre 2009
-
2 oct. 2009 à 08:47
Salut à tous,
j'essaye de charger des données issues d'un simple fichier txt (données séparées par des virgules) dans un datagridview (vb 2008 express)
mais je suis déprimé par la lenteur de l'affichage des données, j'ai essayé avec 50 lignes pour que ça réagisse en moins d'une seconde, et mon fichier fait 1000 lignes
quand je lance avec les milles lignes je suis obligé de killer l'appli car ça rame trop, et pourtant je suis sur un dual-core
décidemment à chaque fois que je me décide à faire un prog en vb.net pour lacher vb 6.0 il y a des trucs comme ça qui me le font regretter
est-ce qu'il y a des astuces pour que ce contrôle soit réactif et fluide ?
cs_philcam
Messages postés132Date d'inscriptiondimanche 12 août 2001StatutMembreDernière intervention17 octobre 2008 21 juin 2008 à 20:16
j'ai pas dit que c'était le code, c'est le remplissage de la grille qui est long, on voit la jauge verticale de la datagrid qui commence a apparaitre car les lignes sont rajoutées, et puis ça freeze jusqu'à ce que la datagrid soit remplie.
le code est pas compliqué, peut être un peu débutant mais bon :
et là j'ai bridé à 100 entrées sinon c'est la cata.
Private
Sub
OuvrirToolStripMenuItem1_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
OuvrirToolStripMenuItem1.Click
Dim
Fichier
As
String
=
""
Dim
La(10000, 11)
As
String
Dim
Compteur
As
Integer
= 0
Dim
Coll
As
Integer
= 0
Dim
I
As
Integer
= 0
Dim
A
As
Integer
If
OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK
Then
Fichier = OpenFileDialog1.FileName()
End
If
FileOpen(1, Fichier, OpenMode.Input)
Input(1, La(10000, 11))
'place la 1ere ligne inutile du fichier dans le fond du tableau
While
Not
EOF(1)Input(1, La(Compteur, Coll))
If
Coll < 11
Then
Coll = Coll + 1
Else
Coll = 0
Compteur = Compteur + 1
End
If
End
While
FileClose()
For
I = 0
To
11DGV1.Columns.Add(I.ToString, La(0, I))
Next
DGV1.RowCount = 101
For
I = 1
To
100
'mis a 100 pour eviter le clash sinon c'est la variable compteur
For
A = 0
To
11DGV1.Item(A, I).Value = La(I, A)
Next
Next
End
Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 juin 2008 à 20:59
Je ne sais pas quoi te dire.
Je viens de reprendre ton code exactement comme tu l'as mis en faisant sauter la limite de 100 et en remplaçant par compteur comme tu indique.
J'ai importer un fichier représente 2446 lignes dans la grille et cela à mis exactement 812 ms
N'aurais-tu pas d'autres traietements qui se font en parallèle à ton import ?
Ou alors tu as mis des évènements sur la datgrid qui se déclenchent au moment de l'import.
---- Sevyc64 (alias Casy) ----# LE PARTAGE EST NOTRE FORCE #
cs_philcam
Messages postés132Date d'inscriptiondimanche 12 août 2001StatutMembreDernière intervention17 octobre 2008 22 juin 2008 à 00:56
en fait je viens d'essayer mais avec l'exe généré et non pas en mode debug, et effectivement c'est plus rapide.
mais quand même, quand je bouge la jauge pour faire défiler la datagrid vers le bas c'est loin d'être fluide, ça fait comment chez toi ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 juin 2008 à 20:47
ben non, aucun problème de scrolling particulier, juste un léger clignotement durant le déplacement de la barre mais le rafraichissement est instantané dès que je bouge plus.
---- Sevyc64 (alias Casy) ----# LE PARTAGE EST NOTRE FORCE #
koalolo
Messages postés1Date d'inscriptionmardi 9 septembre 2008StatutMembreDernière intervention 9 septembre 2008 9 sept. 2008 à 12:09
Ben Je suis face à un problème similaire.
J'utilise un datagridview dans un programme qui ne sert qu'a afficher une sorte de calendrier.
Ce programme je bosse dessus depuis mai.
A l'époque j'avais un Pc avec un P4E de 3.00 ghz, aucun problème d'affichage.
Je viens de changer pour un quadcore, et maintenant le datagridview s'affiche très lentement.
Pour les deux machines j'ai un windows sp2, et j'utilise le même fichier vb et la même version de vb 2008 express, donc à part la config matériel je ne vois pas ce qui peut expliquer cette différence.
cs_lexouille
Messages postés4Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention 2 octobre 2009 28 avril 2009 à 15:55
Bonjour à tous,
J'ai le même problème de rafraîchissement d'un DataGrid (VB.Net 2008).
Le chargement est normalement rapide, mais l'affichage est très lent. Je vois une sorte de balayage du tableau à chaque rafraîchissement de la fenêtre (scrolling, affichage de la fenêtre, etc...).
J'ai essayé sur d'autres machines beaucoup moins puissantes et aucun problème. En plus j'ai une super bécane : xeon dual core, 3Go RAM, quadro fx 3700, raptor 10000 tr/min !!!
Je pense qu'il y a un problème avec le matos, c'est pourquoi j'ai fait une MàJ des drivers graphique mais nada, que dalle, ça ne marche pas mieux.
Je suis en xp sp2 également.
BarthOlivier
Messages postés132Date d'inscriptionmercredi 6 mars 2002StatutMembreDernière intervention27 novembre 20121 20 mai 2009 à 08:51
bonjour , Pareil pour moi. A moin que ca vienne de mon code, je suis preneur, voi le bout de code de remplissage du tableau. au debut j'ai cru que c'etait le "add" qui posait probleme. Mais meme avec ce code c'est pareil. Si quelqu'un a une idée, je suis preneur. Le balayage sur 12*7 c'est horrible. moins d'une seconde, mais le balayage est fatiguant. Alors sur mon aplli en cours avec 7 * 2000 je met un temps fou ...
dataGridView.ColumnCount = 7;
dataGridView.RowCount = 12;
dataGridView.Columns[0].Name = "Ordre";
dataGridView.Columns[1].Name = "Nom planète";
dataGridView.Columns[2].Name = "Metal";
dataGridView.Columns[3].Name = "Or";
dataGridView.Columns[4].Name = "Cristal";
dataGridView.Columns[5].Name = "Hydrogène";
dataGridView.Columns[6].Name = "TOTAL";
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 20 mai 2009 à 09:14
Pour éviter le problème de clignotement, vous pouvez bloquer le rafraichissement de la datagrid à l'écran durant le remplissage.
Il faut mettre NomDataGrid.SuspendLayout, juste avant de commencer le remplissage. Une fois celui-ci terminer, il faut réactiver le rafraichiseemnt de la datagrid en mettant NomDataGrid.RestoreLayout
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
BarthOlivier
Messages postés132Date d'inscriptionmercredi 6 mars 2002StatutMembreDernière intervention27 novembre 20121 20 mai 2009 à 09:28
bonjour et merci casy.
c'est une méthode que j'avais déjà utilisée mais sans différence. Le l'ai retestée par acquis de conscience mais je confirme : rien. De ce que j'avais compris en lisant la MSDN sur le SuspendLayout/ResumeLayout c'est que cela influait surtout sur les dimensionnement/redimmensionnement des controles. Genre un panel dans lequel on crée des controles dynamiquement. Enfin je peux me tromper mais dans mon cas ca ne fonctionne pas et le clignotement est toujour present..
Merci quand meme :(
a noter que j'ai E8500 - 4GRam (bon 3.2Go je sais :) ) et sous XP. j'ai peu de processus lancé. Je ne pense pas que la becanne soit a mettre en cause. :(
cs_lexouille
Messages postés4Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention 2 octobre 2009 20 mai 2009 à 09:32
Merci pour l'info, mais le problème ne concerne pas le remplissage.
En fait, à chaque fois que j'affiche mon DataGridView j'ai le balayage.
Par exemple, si mon application est masquée et que je la passe au premier plan, paf, ça bloque l'ordinateur le temps de l'affichage en balayage du tableau. Ca bloque même avec Alt+Tab.
Je précise aussi que sur tous les autres postes testés il n'y a aucun problème, tout s'affiche très rapidement.
cs_lexouille
Messages postés4Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention 2 octobre 2009 25 mai 2009 à 11:16
Bonjour à tous !
J'ai enfin trouvé un solution au problème de rafraîchissement de mon DataGridView.
Le problème vient bien de la carte graphique. Apparemment seulement certaines nvidia seraient touchée.
Enfin bref, voici un billet qui explique qu'il faut surcharger la classe DataGridView, juste pour rajouter le double buffering. Fallait y penser !