ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007
-
5 mai 2006 à 17:42
watabou
Messages postés9Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention15 juillet 2009
-
15 juil. 2009 à 17:58
Bonjour,
je me permets de vous écrire car j'ai un problème puissant :
J'ai un arraylist d'objets nombreux qui ont une vie intense : ( je récupère des prix de marché en temps réel et fait des calculs sur ces prix .... )
Sans interface graphique tout va bien ... Il faut compter 2500 objets et des mises a jour de manière aléatoire mais en général toutes en meme temps....
Maintenant je dois présenter des résultats à de gentils utilisateurs .... et ca se complique ...
"binder" 2500 object dans un datagrid ... à chaque fois qu' un objet bouge ... ca fait beaucoup.... et ma CPU prend chère ...
Mon idée est la suivante ... je n'aimerais binder que ce que je veux voir ....
a savoir si mon utilisateur veux voir un sous ensemble de mes objets ... alors je ne bind que ceux ci ( l'arraylist total continuant à se mettre à jour en mémoire ... ) et meme mieux j'aimerai ne binder que ceux affiché à l'écran.... What you see, is not all what I have :)
fredgont
Messages postés2Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention12 mai 2006 5 mai 2006 à 20:17
L'utilisateur a t'il la possibilité de modifier les chiffres?
Sinon, dans ce cas l'utilisation d'une vue sur les données (stockées dans un dataset en mode connecté à une base de donnée) permettrait de limiter les calculs, non?
Même une base access (mais bon...) pourrait faire l'affaire, la charge de travail serait répartie sur deux applications, une qui charge et modifie les données dans la base, la deuxième qui les consultent ou les modifie sur un datagrid connecté au dataset lui même connecté sur la base.
Cela dépend de la réactivité dont vous avez besoin, un dataset représrente une vraie base de donnée chargée en mémoire, qui est fonctionne soit en mode synchrone soit en mode asynchrone (ce dernier pour être réactif peut être géré dans un thread)
voila à quoi je pense, il doit exister d'autres solutions j'imagine..
ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007 7 mai 2006 à 09:23
Merci pour votre réponse...
en fait, après avoir discuté avec un ami ... je vais me lancer dans l'héritage d'un dataTable... pour que ce soit le dataset qui l'héberge qui gère mon affichage ... (il m'a parlé du paging ... qui permet de gérer q'un nombre limité d'enregistrement à l'affichage ... )
Du coup c'est mon beau modèle qui va voler en éclat ....
ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007 9 mai 2006 à 21:50
Re ...
Bon ça pue le poney ... en fait ... le System.windows.forms.datagrid ( si je me souviens bien du chemin .. ) n'a pas la possibilité de faire du paging .... du coup j'ai tout cassé pour rien ...
En plus ... modifier un datatable est bien plus long qu'un Arraylist ... et la ma CPU prend très chère ... je vais donc devoir gérer moi meme la communication entre mon ArrayList et l'affichage ... sous forme d'un dataTable qui ira peupler à la demande les objets qui l'intérroge ...
fredgont
Messages postés2Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention12 mai 2006 12 mai 2006 à 00:42
bon courage...
de mon côté je travaille avec les control web datagrid, qui sont aussi un peu ch... à gérer. En fait, il semble plus facile (dans le cas où l'on connais le nb de colonnes à afficher) de créer à la main dans le code asp les colonnes avec la propiété datafield qui permet de de binder avec une datatable. Le bindage se fait grace au nom de colonnes qu'il faut avoir préalablement entrés dans le code .net, on peut donc choisir les colonnes que l'on veux afficher. J'ai essayé plusieurs fois de binder une arraylist, sans résultats trés éloquents.
Casser pour casser:
Quant à tes calculs, ne serait il pas plus simple (et moins chére en cpu) de déléguer tout l'aspect calculs et chargement des données à une base de données, avec des triggers dessus (à l'insert ou update) et des proc stockées qui se charge du calcul, la charge serait divisée sur deux machines!
Vous n’avez pas trouvé la réponse que vous recherchez ?
watabou
Messages postés9Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention15 juillet 2009 15 juil. 2009 à 17:58
( Je parle au niveau web )
Par défaut seul les éléments affichés sont bindés.
Ex :
100 000 élements récupérés en bdd et mis en source d'un afficheur de données affichant 20 éléments, lors du databind() il va binder tes 20 premiers éléments seulement : seul les éléments affichés sont envoyé du coté client ( et encore heureux ! ).
Si après c'est du coté serveur ( tu es en form donc bon .. ) que tu ne veux pas récupérer tes 100 000 éléments en bdd : une procédure stocké, la simple requête ou du linq to sql fonctionne.