Boucle qui consomme beaucoup de memoire [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 23 mai 2009
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Non membre
Dernière intervention
13 avril 2020
-
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

Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Non membre
Dernière intervention
13 avril 2020

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.