Serialisation + gros problème

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 12 oct. 2005 à 10:49
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 18 oct. 2005 à 09:39
Salut à tous,



Mon problème est que j'ai une instance de la classe Donnees (qui contient une arraylist de personne) et qui s'apelle bdd.



Mon instance bdd comporte une ArrayList de 50 000 objets Personne.



Quand je serailise bdd avec 10 000 instance Personne ca met 13 sec à ecrire dans le fichier ( 1.7Mo)



pour 20 000 instances, ca met 1 min 25 et le fichier fait (3.4Mo)



pour 30 000 instances, j'ai pas vu la fin.....



Pour deserialiser ca va, ca prend 5sec, mais pour serialiser ( écrire
dans le fichier ) c'est horrible tellement c'est long. Le problème
c'est que mon appli devra pouvoir enregistrer au moins 200 000
personnes.



Je precise que bdd comporte une arraylist de Personne mais aussi
d'autre ArrayList moins grande (Société, Voiture...) ainsi que des
champs relatif à l'application (couleur de l'appli etc....)



Y'a t'il un moyen d'accelerer la serialisation ?? comment faire ???



Par avance, merci.

22 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 oct. 2005 à 14:57
ok... dans ce cas, je ne passerai pas par la sérialisation "automatique" de .NET mais j'écrirai moi-même dans un BinaryStream tous mes objets... bien plus rapide puisqu'il n'y a pas de réflexion sur les objets.

Sébastien FERRAND
[MVP C#]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 oct. 2005 à 10:54
euh... utilise Access... au dela de 5000 items, le xml n'est pas une solution viable.

Sébastien FERRAND
[MVP C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
12 oct. 2005 à 11:05
Je fais de la serialisation binaire en faite : ca me sert a ce quand
l'utilisateur quitte son appli et la relance par la suite il retrouve
tout ses paramètre à l'identique.



//On
crée un nouveau Formatter




IFormatter
formatter = new BinaryFormatter();









//On
crée un flux vers fichier




Stream
stream = new FileStream("myExampleObject.bin",
FileMode.Create, FileAccess.Write, FileShare.None);









//On
sérialise




formatter.Serialize(stream,
myExampleObject);









//On
ferme le flux




stream.Close();
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
12 oct. 2005 à 11:06
Dans l'exemple myExampleObject est une
classe serialisable qui contient une arraylist de 50 000 items en faite
plus d'autre truc aussi mais moins important en nombre
0

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

Posez votre question
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
12 oct. 2005 à 11:52
Non mais comme te l'ai dit Seb, oublie tout de suite le XML tu ne t'en

sortiras jamais !!!

Access a été conçu pour les bases de ton niveau jusqu'à plusieurs millions d'objet

donc saute dessus de toutes façons tu n'as pas le choix ...

La brigade meurt mais ne se rend pas (Hisoka)
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
12 oct. 2005 à 12:19
mais j'utilise pas le xml........[javascript:Insert_Emoticon('/imgs2/smile_dead.gif'); ]
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
12 oct. 2005 à 17:57
heu c moi ou j'ai rien compris au post la ???

pour finir tu utilise access ou tu veux juste stocker des donnees pour le design de ton appli en xml ou alors tes données dans du xml...


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
12 oct. 2005 à 18:21
J'ai trouvé une question déja posé sur le forum et qui correspond exactement à mon problème, mais ca a pas été résolu....

J'ai pas ecris une seule fois le mot "xml", je sais pas pourquoi tout le monde croit que je veux faire du xml ou du access c'est pas pour utiliser un sgbd..



http://www.csharpfr.com/forum.v2.aspx?ID=265713
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
13 oct. 2005 à 08:55
ben si coq seche t'est mal ...




<HR>
Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 oct. 2005 à 09:02
une question bête... pourquoi sérialiser

Sébastien FERRAND
[MVP C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 oct. 2005 à 12:19
Pour que quand je quitte mon programme, une instance de classe qui
represtente toutes mes données soit serialisé dans un fichier et que
quand je relance mon progarmme ce même fichier soit désérialisé et que
je recupere à l'identique cette instance, donc toutes mes données. Je
pense que c'est la meilleur solution mais y'a peut être mieux à faire.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 oct. 2005 à 12:26
ce que je ne comprends pas c'est que tout cela, tu l'as déjà dans ta base de données... et qu'il est surement plus rapide de refaire une requête qui rechargera l'ensemble de tes données.

surtout qu'entre le moment fermera son application et le moment où il l'a rouvrira, les données pourrons avoir changer.

Maintenant l'intérêt de charger 50.000 objets en mémoire

Sébastien FERRAND
[MVP C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 oct. 2005 à 12:39
Je suis pas connecté à une base de donnée, c'est juste que j'ai une
tableau de 150 000 personne en mémoire et qu'il faut que l'ecrive qq
part, en serialisant dans un fichier. J'ai pas le choix pour le nombre.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 oct. 2005 à 13:41
ce qui me dérange dans ton raisonnement c'est le chargement du tableau de 150.000 personnes...

je ne sais combien d'informations tu stockes par objet... mais ca risque de monter très vite en mémoire... t'imagine qu'en l'état, si tu as 500octets pour 1 personne tu vas te retrouver avec environ 75Mo de mémoire utilisée uniquement pour ton tableau !
plus biensur la mémoire allouée à ton programme... en moyenne 10Mo... etc.

C'est pourquoi, je te conseille depuis le début du thread de stocker tes données dans une base access.

Sébastien FERRAND
[MVP C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 oct. 2005 à 14:53
Ben c'est juste pour l'exemple imagine juste que j'ai un tableau de 150
000 personnes en mémoire et que je veux le sauver sur le disque pour le
récupérer sur le disque, c'est sur que je trouve pas ca logique non
plus mais c'est un cas d'école
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 oct. 2005 à 15:24
et t'aurais pas un bout de code qui trainerais ?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 oct. 2005 à 15:32
pas sous la main... mais je vais essayer d'y pensé ce soir

Sébastien FERRAND
[MVP C#]
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 oct. 2005 à 15:57
ok, merci, c'est sympa
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
15 oct. 2005 à 19:04
Là le problème ne vient pas du nombre d'éléments mais plutôt du contenu de la classe Personne.
Tu n'aurais pas une ou des Hashtables dedans ?

/*
coq
MVP Visual C#
*/
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
17 oct. 2005 à 09:56
non non du tout, doit y avoir 20 propriétées differentes par contre.
0
Rejoignez-nous