Remplir une List<> Généric

Résolu
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013 - 9 févr. 2009 à 17:57
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 13 févr. 2009 à 16:21
Bonjour,

Je possède une base de données SQL SERVER, avec une table "Personne".
A l'intérieure de cette table il y a environ plus de 10 000 Ligne de personnes.
Au début je suis partie pour remplir un DataSet avec un SqlDataAdapter, mais le probleme c'est que sa prend beaucoup de mémoire même une fois détruit...
J'entend partout sur les forum divers qu'il vaut mieux utilisé des List<> plutôt que des DataSet... ok, essayons.
Mon probleme est le suivant, comment on peut remplir une List rapidement comme le SqlDataAdapter pour le DataSet?
Il y a t'il une solution rapide, ou faut il faire une foreach sur le DataReader et ajouter à la main...

Merci de m'indiqué (ou morienté) vers une solution rapide et qui prend moin de mémoire qu'un DataSet une fois Détruit.

Qui ne tente rien, n'a rien

5 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 51
10 févr. 2009 à 10:18
Salut.

Le plus rapide, c'est encore de ne pas gérer tes 10 000 entrées à chaque fois. Je doute que tu cherches à toutes les afficher en même temps (si c'est pour les afficher, tu ferais au moins une pagination). Donc je serais toi, je regarderais d'abord quels sont les entrées dont du as réellement besoin.
Et si cependant tu as besoin de faire du traitement sur chaque entrée, pourquoi les mettre dans une liste ou un dataset ? Un while(reader.Read()) sur un SqlDataReader est clairement plus simple et tu y gagneras vachement en mémoire.

Krimog :
while (!succeed = try()) ;
3
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
10 févr. 2009 à 10:45
Ok, je pense que je vais passer par une pagination car faire un while(reader.Read()) sur un SqlDataReader et horriblement long...

Merci pour ta réponse.


Qui ne tente rien, n'a rien
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 févr. 2009 à 11:53
Faire des paginations avec SQL Server qui ne gère pas LIMIT, c'est parfois assez tordu ceci dit.
0
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
13 févr. 2009 à 15:03
Ouai, sa c'est sur ....


Qui ne tente rien, n'a rien
0

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

Posez votre question
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 51
13 févr. 2009 à 16:21
Tordu, c'est clair, mais pas infaisable.
Il "suffit" grosso-modo de trier à l'envers, de prendre le TOP (nbtotal + 1 - premier à prendre), puis de retrier dans le bon sens et prendre le TOP (nb à prendre). Enfin, j'avoue, c'est pas l'éclate, mais je pense que c'est quand même plus rapide que de traiter les 10000 enregistrement ensembles (surtout si tu fais une procédure stockée).

Genre mes enregistrements : 1 2 3 4 5 6 7 8 9. (9 éléments) Je veux du 2ème au 4ème
1) Tri à l'envers : 9 8 7 6 5 4 3 2 1
2) Top (9+1-2) : 9 8 7 6 5 4 3 2
3) Tri à l'endroit : 2 3 4 5 6 7 8 9
4) Top (4+1-2) : 2 3 4

Krimog :
while (!succeed = try()) ;
0