cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 2010
-
12 oct. 2005 à 10:49
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 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 ???
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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.
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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);
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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..
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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.
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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.
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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.
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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