Boucle qui consomme beaucoup de memoire

Résolu
cs_pedro0077 Messages postés 3 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 3 août 2010 - 3 août 2010 à 12:16
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020 - 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

1 réponse

kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
3 août 2010 à 12:46
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.
3