Java lenteur ouverture fichier Excel

Fermé
g25452 Messages postés 66 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 1 juin 2010 - 1 août 2008 à 16:15
g25452 Messages postés 66 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 1 juin 2010 - 4 août 2008 à 13:28
Bonjour,

Je suis en train de faire une application web en java avec eclipse

Dans cette application je dois ouvrir beaucoup de fichier excel.
Pour lire 70 fichier ca me prend 1 min 50.

Voici mon code :

private void traiterFichierExcel(String filename) {

=> Workbook workbook = Workbook.getWorkbook(new File(filename));

...

C'est cette ligne qui fait que ca ralentit tres fortement mon programme.

Est-ce quelqu'un connais une solution pour aller plus vite?

Merci
A voir également:

3 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
1 août 2008 à 16:20
Bonjour,

WorkBook étant un package officiel (je connais pas mais d'après une courte recherche effectuée c'est ce qu'il me semble être), je pencherai plus pour un problème d'algorithme dans ton programme plutôt qu'un problème de cette classe.

Tu parle d'ouvrir 70 fichiers, comment les ouvres-tu ? Tous ensemble, dans une boucle, etc ?
Peux-tu nous donner tout le code en rapport avec l'ouverture de ces fichiers excels ?

Sinon, l'explication possible est relativement simple : Si tu ouvre tous ces fichiers en même temps, au bout d'un moment il est normal que niveau mémoire Java pèche un peu ce qui fais ralentir ton application.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
1 août 2008 à 16:34
Après avoir parcouru plus en détail cette interface (et la classe handler qui l'implémente), je n'ai pas trouvé de manière qui permette de garder une seule variable (de classe par exemple) et de la ré-unitialiser sur un nouveau fichier au lieu de ré-instancier un nouvel objet dans une nouvelles variable locale à ta fonction à chaque appel de ta méthode.

En effet, en java, le garbage collector est appelé un peu au petit bonheur la chance. S'il ne vient pas supprimer les objets que tu as créé pour loader tes fichiers, ceux ci seront toujours en mémoire et prendront une place inutile, ce qui a plus ou moins long terme - selon le nombre de données que tu load dans un temps imparti - peu provoqué un manque de mémoire et un ralentissement du programme, normal.

Tu peux toujours mettre un : System.gc(); au début de ta fonction pour "forcer" la GC à venir nettoyer mais je doute que ce soit efficace.

Aussi : as tu bien fermé les fichiers que tu as ouvert de cette façon ?
0
g25452 Messages postés 66 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 1 juin 2010
4 août 2008 à 13:13
Voici mon code plus complet, je fais un for pour traiter tous les dossiers de mon repertoire :

String chemin = "//One/Services/Excel/";
File dir = new File(chemin);
String[] input = dir.list();

for (int i=0; i<input.length; i++) {
String filename = input[i];
traiterFichierExcel(chemin + filename);
}

puis

private void traiterFichierExcel(String filename) {

=> Workbook workbook = Workbook.getWorkbook(new File(filename));
0
g25452 Messages postés 66 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 1 juin 2010
4 août 2008 à 13:28
j'ai essayé System.gc() et ca change rien
merci quand meme
0