Boucle qui consomme beaucoup de memoire [Résolu]

Messages postés
3
Date d'inscription
samedi 23 mai 2009
Dernière intervention
3 août 2010
- - Dernière réponse : kaloway
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Dernière intervention
30 mars 2011
- 3 août 2010 à 12:46
salut tout le monde ;

mon probleme c'est ke j'ai un programe ki marche b1 mais qui consomme beaucoup en memoire (la moitié) peut etre ke la boucle while qui cause le probleme!!!
voici les 2 classes

classe extraction qui permet de parcourir un fichier est de le lire
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import java.io.* ; 
public  class extraction 
 {
 String fichierPath="";
 String chaine="";

  public String getChaine() {
          return chaine;
      }
  
// Méthode de choix d'un fichier
public void choisir() {
// Crée un panneau
JPanel contenuFenêtre = new JPanel();

// Affecte un gestionnaire de présentation à ce panneau
GridLayout disposition = new GridLayout(4,2);
contenuFenêtre.setLayout(disposition);
// Crée les contrôles en mémoire


// Ajoute les contrôles au panneau
// Crée le cadre et y ajoute le panneau
JFrame cadre = new JFrame("Boutton parcourir");
cadre.setContentPane(contenuFenêtre);

// Affecte ses dimensions à la fenêtre et la rend visible
cadre.setSize(400,100);
cadre.setVisible(true);

JButton lancer = new JButton("parcourir");
contenuFenêtre.add(lancer);
//Action sur le bouton
lancer.addActionListener( new ActionListener() {
    public void actionPerformed(ActionEvent e){
        JFileChooser chooser = new JFileChooser();
        int returnVal = chooser.showOpenDialog(chooser);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
           System.out.println("Vous avez choisi le fichier : " +
                chooser.getSelectedFile().getName());
           		fichierPath = chooser.getSelectedFile().getAbsolutePath();
           	System.out.println("le lien du fichier est : "+ fichierPath);
           	String ligne="" ; 
           	System.out.println ("*** debut du fichier ***");  
           	BufferedReader entree = null;
try {
entree = new BufferedReader (new FileReader (fichierPath));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
    		do
    			{ try {
ligne = entree.readLine() ;
} catch (IOException e1) {

e1.printStackTrace();
}
    				if (ligne != null) {System.out.println (ligne) ;
    				chaine+=ligne+"\n";}
    			}
    		while (ligne != null) ;
    		//System.out.println (chaine) ;
    		try {
entree.close() ;
} catch (IOException e1) {

e1.printStackTrace();
}
    		System.out.println ("*** fin du fichier ***");       	 
    }
 
    }
} );

}

}


classe maine qui permet de retourner des valeurs a l'aide de regex a partir du fichier

import java.util.*;
import java.util.regex.*;
import java.io.*;

public class main extends extraction {

private static Pattern pattern;
private static Matcher matcher;

public static void main (String args[])
{ 	
String chaine2 ="";
extraction lecture = new extraction() ;	
    lecture.choisir();
    while (true) {
    	String aParser= lecture.getChaine();
if (!aParser.equals(chaine2)) {
chaine2=aParser;
    Pattern p=Pattern.compile("(.*?)*#\\{(.*?)\\}#.*?");
Matcher m=p.matcher(aParser);
while(m.find()) 
System.out.println(m.group(2)); 

}
}
}}


Merci d'avance pour vos aides
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Dernière intervention
30 mars 2011
3
Merci
Le problème est que chaine est un string. La classe string est consommatrice de ressource, surtout quand on concane des chaine. il est préférable d'utiliser les classes stringbuffer ou stringbuidler.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de kaloway

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.