Bonjour,
J'ai besoin de faire du easy load sur des données, je m'explique :
j'aimerai charger à partir d'un fichier les informations minimales à connaitre sur des données, dans le cas ou ces données sont manipulées je charge alors entierement à partir d'un fichier également.
J'ai plusieurs attributs dans ma classe dont un qui peut prendre une place certaine, de type Object[][], pouvant contenir des String ou float/int. C'est biensur cet attribut que j'aimerai ne pas charger à chaque fois.
Dans un premier temps, j'ai utilisé un parser XML SAX pour faire mon chargement minimal et mon chargement total.
Cela marche trés bien mais j'aimerai diminuer le temps necessaire au chargement de mon attribut consommateur d'espace.
C'est pourquoi dans un deuxième temps, je me suis dit que la serialisation pouvait peut-etre être plus performante, plus rapide, par conséquent au lieu d'utiliser mon parser SAX,
Dans ma méthode de chargement totale à partir de mon fichier j'utilise :
La même chose pour ma fonction de sauvegarde (Car il est possible que mon object change) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 FileInputStream fis = new FileInputStream(this.getSource()+"_bin"); ObjectInputStream ois = new ObjectInputStream(fis); // mon attribut en question de type Object[][] this.values = (Object[][])ois.readObject(); ois.close();
Ces deux méthodes fonctionnent, mais à mon étonnement la deuxième est plus longue que la premiere, à savoir le perser XMl est plus rapide, est ce qu'il est possible d'améliorer ma deuxième méthode?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 FileOutputStream fos = new FileOutputStream(this.getSource()+"_bin"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(this.values); oos.flush(); oos.close(); // je vide mon attribut pour liberer memoire this.values = null; System.gc();
Exemple de temps d'execution observé (1Go pour la JVM):
nbreLignesDeLaMatrice,nbreColonnesDeLaMatrice,temps(chargement_Xml),tailleFichierXML(Octets),temps(Loading_Serialisation_matrice),tailleFichierBinSerialise
3500,200,4736,20348881,6097,9123703
5000,200,6519,29067616,8722,13031938
50000,100,32921,145763532,43660,65412853
10000,1000,66046,289996053,86680,129925373
Merci d'avance pour vos reponse.
Partager