Java lenteur ouverture fichier Excel

g25452 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -  
g25452 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -
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 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
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 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
j'ai essayé System.gc() et ca change rien
merci quand meme
0