Durée de chargement dans un listview

cs_sony20 Messages postés 14 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 14 mars 2005 - 11 mars 2005 à 16:11
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 - 14 mars 2005 à 13:34
Bonjour,
J'ai besoin d'un avis SVP :

J'ai une appli VB qui cherche dans SQL (à l'aide de ADODB) les données d'une table selon des paramètres. Les données sont affichées grâce à un MSHFlexGrid. Le temps de réponse pour l'affichage est très rapide.
Cette appli je la reprogramme en VB.NET : j'utilise ADO.NET avec connexion + proc stockées + SQLDataReader. Pour afficher les données j'utilise un listview :
Do
While dr.Read()
lstListe = lvDetail.Items.Add("table_bl")
lstListe.SubItems.Add(dr("table_client"))
.....
Loop

Je charge de cette manière environ 30 champs-colonnes.
Et là le temps de réponse est interminable ! Par rapport à VB c'est flagrant.
Pour 10000 enregistrements-lignes affichées = environ 30 secondes d'attente.

Est-ce normal ? y a-t-il une parade ? est-ce que je fais quelque chose de lourd ?
SVP si qq'un a une idée .....
Merci d'avance !

11 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 mars 2005 à 17:42
Salut
Si tu as beaucoup d'infos à stocker dans une ListView, il est préférable de supprimer la gestion alphabétique (le Sort) des colonnes car, à chaque insertion, le composant est redessiné.

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mars 2005 à 18:29
Un petit conseil également : lors d'un chargement d'un grand nombre de
données dans un contrôle de liste, rend le invisible ou utilise la
fonction de l'API LockUpdateWindow, cela permet d'accèlérer un peu le
chargement car Windows n'a plus à raffraichir l'affichage du contrôle à
chaque ajout !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
11 mars 2005 à 19:45
avant de remplir ton lv met lv.beginUpdate

et a la fin lv.endUpdate

http://www.correzeweb.com
http://www.localetv.com
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
11 mars 2005 à 20:05
y a aussi :

lv.SuspendLayout()
...
lv.ResumeLayout()

Sébastien FERRAND
Blog :
http://blogs.developpeur.org/sebmafate
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
12 mars 2005 à 13:21
10000 enregs ?
Les intervenants précédents te donnent des astuces mais moi je me pose une autre question : Est-ce vraiment nécessaire d'afficher autant d'enregistrements ?
J'imagine l'utilisateur qui va passer beaucoup plus de 30 secondes pour trouver les enregs qui l'intéressent vraiment.
Ne peux tu pas restreindre un peu plus le nombre d'enregs suivant les critères de l'utilisateur ?

Loup Gris
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
12 mars 2005 à 14:49
CanisLupus > d'accord avec toi ! Une bonne application ne devrait jamais proposer autant d'enregistrements à la fois. C'est ingérable pour l'utilisateur. Un choix par mot-clé ou une restriction aux 3 premiers caractères serait déjà un sacré coup de balai dans tout cela...

Guy
0
cs_sony20 Messages postés 14 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 14 mars 2005
14 mars 2005 à 09:31
Merci à tous d'avoir répondu ....


Je vais essayer toutes les propositions que vous me faites, en espérant gagner du temps. Par curiosité est-ce qu'un datagrid serait plus rapide ?

Pour répondre au problème des 10000 enregistrements : j'ai une dizaine de critères qui feront qu'en règle générale, il y aura sans doute bcp moins d'enreg que ça. J'ai utilisé l'exemple le plus significatif pour vous montrer clairement la différence de temps d'affichage entre VB et VB.NET. Mon appli donne à l'utilisateur les Bons de livraisons d'une journée : Neo.balastik pour ma part je pense qu'une bonne appli doit pouvoir répondre aux attentes de l'utilisateur. Je ne vois pas comment leurs expliquer : " vous ne pouvez pas afficher tous les BL parce qu'il y en a plus de 10000 ... oui vous pouviez avec l'ancienne appli en 1 seconde mais plus avec la nouvelle qui est censée être plus performante " ...... Bizarre pour ma part, non ?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 mars 2005 à 09:46
eh eh, les différences entre VB6 et VB.NET... une des raisons qui me pousse à ne pas migrer vers .NET...

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
14 mars 2005 à 12:43
>sony20 : Dans le cas où l'ancienne appli proposait autant de records, bien entendu il faudra justifier pourquoi en proposer moins : c'est un dur combat. Mais ça, tu ne l'avais pas signifié dans ton message initial.

Ceci di, je reste persuadé que 10 000 records c'est bcp trop. Mais hélas, tu es contraint par ce que proposait l'appli précédente. Aussi, une bonne appli doit bien entendu répondre aux attentes des utilisateurs, mais un bon analyste se doit de faire des compromis entre ce que désire chacun et ce qui pourrait détériorer fortement les performances de l'application. Et même si l'utilisateur boude, tant pis... Sauf si ta vie en dépend ;O)

Retourner 10 000 records pour n'en choisir que quelques-un au bout du compte, il y a sérieusement matière à réfléchir. Bonjour la charge réseau (si l'appli est client-serveur). C'est l'admin réseau qui sera enchanté ;O)

Mais de toute façon, le ListView reste (ca n'engage que moi) un contrôle peu recommandable point de vue rapidité de chargement. J'en ai souvent fait les frais en VB6.

Mais tout cela, c'est un autre débat.

Guy
0
cs_sony20 Messages postés 14 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 14 mars 2005
14 mars 2005 à 13:14
Je suis d'accord avec toi pour les 10 000 mais je dois leur laisser la possibilité de les afficher : c politique ! ;-)
Si le listview n'est pas top, que me proposes-tu ? Je suis tout à fait prêt à utiliser autre chose ... un datagrid ? ou ?
En plus j'avais déjà un inconvénient avec le listview pour figer des colonnes dans le cas d'un défilement (scrollbar) horizontal ....
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
14 mars 2005 à 13:34
Re,

Pour rester dans la même philosophie que les ListView de Microsoft, il existe un Grid (SGrid 2) gratuit développé par VbAccelerator (je l'utilise dans de nombreux projets) :

http://www.vbaccelerator.com/home/VB/Code/Controls/S_Grid_2/S_Grid_2/article.asp

Les sources sont disponibles. Il y a donc moyen de le customizer. Mais c'est de la haute voltige. Selon moi, ce contrôle est plus rapide que le ListView. A tester !

Il y a aussi un Grid (iGrid 2.51) plus ou moins similaire que VbAccelerator à cette adresse :
http://www.10tec.com/

Celui-ci est payant, mais si tu les désires j'ai la version 2.50 (laisse-moi ton mail perso). L'avantage de ce dernier contrôle est qu'il est possible de checker si l'utilisateur utilise la barre de défilement et de savoir à quelle position elle se trouve dans le nombre de lignes total. Ceci pourrait être utile pour charger la suite des records successivement en fonction d'où se situe la barre de défilement. Ex : si la barre se trouve en bout de liste, alors on charge le reste des records... Ce serait efficace je crois. Tout cela est à tester.

Sinon il reste les contrôles ActiveX professionnels payants.
Infragistics propose toute une serie de très bons contrôles que l'on peut directement lier à une source de données :

http://www.componentsource.com/Catalog.asp?fl=&gf=+AUTHORINFRAG&gd=Infragistics&bc=&sc=CS&cv=bu&SERC=GGC1

Bonne chance !

Guy
0
Rejoignez-nous