cs_sony20
Messages postés14Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention14 mars 2005
-
11 mars 2005 à 16:11
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDerniè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 !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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/
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 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 ?
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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...
cs_sony20
Messages postés14Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention14 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 ?
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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.
cs_sony20
Messages postés14Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention14 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 ....
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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) :
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 :