IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

application très lente


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut application très lente
    Bonjour à tous

    je fais actuellement une application en java, reliée à une base de données.
    L'utilisateur passe par des interfaces graphiques.

    A un certains moment, l'application se bloque et met beaucoup de temps à répondre. A cet endroit, le programme doit faire quelques requêtes SQL.
    Pensez vous que ce sont ces requêtes qui ralentissent autant l'application ou le problème peut il venir d'ailleurs.

    Merci
    Bye

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    essaye de faire un system.out.println() a la place de la requete.
    Si c'est plus court, est ce que ta requete s'effectue apres un long temps d'execution ou elle plante?
    Si elle plante essaye de l'executer dans ton gestionnaire de base

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avec si peu de détail ce n'est pas évident, mais je parierais sur un blocage de l'EDT (lire Threads et performance avec Swing par gfx)...

    • Quel type d'UI tu utilises ? Swing ? AWT ? SWT ?
    • A quel moment le programme se bloque-t-il ? Toujours dans les mêmes fonctionnalité ou de manière aléatoire ? Si c'est toujours au même endroit il serait utile de poster un peu de code...


    a++

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Avec si peu de détail ce n'est pas évident, mais je parierais sur un blocage de l'EDT (lire Threads et performance avec Swing par gfx)...

    • Quel type d'UI tu utilises ? Swing ? AWT ? SWT ?
    • A quel moment le programme se bloque-t-il ? Toujours dans les mêmes fonctionnalité ou de manière aléatoire ? Si c'est toujours au même endroit il serait utile de poster un peu de code...


    a++
    Je pense aussi que ça doit être ça vu la "petite" description du problème...

  5. #5
    Membre confirmé Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    Deja merci a tous de m'avoir répondu.

    Je vais essayer de répondre à toutes vos questions, mais je ne pense pas pouvoir mettre le code de cette page en entier il serait trop long.

    Tout d'abords, j'ai encore un peu de mal à faire la différence entre AWT et SWING, mais je ne pense pas que le problème vienne de la. Je pense que ça vient de cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
        		Statement st=conn.createStatement();
     
        		String query1 = "SELECT Count(*) as nbr FROM film";
    		ResultSet rs1 = st.executeQuery(query1);
    	   		while (rs1.next())
    	   			{film = new String[rs1.getInt("nbr")];}
        		int i = 0;
     
     
        		String query= "SELECT DISTINCT Titre FROM film F, joue J, acteur Ac, appartient Ap, categorie C," +
        				"realisateur Re, realise R";
        		if (paramfilm!=null)
        		{
        			query+= " WHERE (Titre LIKE '% "+paramfilm+" %' OR Titre LIKE '"+paramfilm+" %' OR Titre LIKE '% "+paramfilm+"' AND Titre REGEXP '[[:<:]]tout[[:>:]]') ";
            		i = 1;
        		}
        		if (paramact!=null)
        			{if (i==1){query+=" and";} else {query+=" WHERE";}
        			query+= " CONCAT(PreAct,' ',NomAct) LIKE '"+paramact+"' and Ac.IdAct= J.IdAct and J.IdFilm = F.IdFilm";
        			i = 1;}
        		if (paramreal!=null)
        		{
        			if (i==1){query+=" and";} else {query+=" WHERE";}
        			query+=" CONCAT(PreReal,' ',NomReal) LIKE '"+paramreal+"' and Re.IdReal=R.IdReal and R.IdFilm=F.IdFilm";
        			i=1;
        		}
        		if(paramcat!=null)
        		{
        			if (i==1){query+=" and";} else {query+=" WHERE";}
        			query+=" LibelCat LIKE '"+paramcat+"' and C.IdCat=Ap.IdCat and Ap.IdFilm=F.IdFilm";
        		}
        		query+=" ORDER BY Titre;";
     
        		i=0;
        	        ResultSet rs = st.executeQuery(query);
     
        	        i=0;
        	        while(rs.next())
        	        {
        	        	film[i]=rs.getString("Titre");
        	        	System.out.println (film[i]);
        	        	i++;
        	        }
        	        st.close();
        	}
        	catch (SQLException e){
        		System.out.println("Gloups "+e);
        	}
     
     
     
        	tFilm= new JList(film);
        	tFilm.setVisibleRowCount(8);
        	conteneur.add(new JScrollPane(tFilm));
    Les paramflm, paramact.. sont des String qui viennent d'un autre formulaire.

    pour information, ma base est en local, et le programme attend tFilm pour afficher la page. J'ai essayer avec un preparedStatement, mais je n'y suis pas arrivée.

    je vous remercie

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Quelques remarques :

    • As-tu testé les requêtes via les outils de ta BD pour voir le temps que cela prend ?
    • Tu ne fermes pas le premier ResultSet (pas bien !). De plus il faudrait le faire dans un bloc finally...
    • Si la requête SQL prend un certain temps et qu'elle est appelé dans une des méthodes évènementielle (comme actionPerformed() par exemple), alors elle est exécuté dans l'EDT et cela bloquera l'interface graphique...



    a++

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si je peux me permettre, pourquoi tu fais :
    ...Titre like '%mot%' or Titre like '%mot' or Titre like 'mot%'... ?
    le premier like te les renvois tous...
    Ce que tu demandes (traduit en français), c'est : donne moi tout ce qui contient 'mot' ou tout ce qui termine par 'mot' ou tout ce qui commence par 'mot'
    Ensuit, les paramact, paramreal et paramcat contiennent les '%' ? Parce que sinon, mieux vaut mettre '=' que 'like'...
    A part ça, tu peux mettre des points d'arrêt dans ton traitement et voir où ça coince...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    dure de te répondre avec si peux de détail.

    Tes requetes sont longues à exécuter sur la bdd (sans passer par jdbc) ?

    est ce que ton programme attend les resultats pour continuer ou alors c'est dans des threads à part ?

    Cette base est accédée par plein de monde en meme temps ?

    La base est locale, sur un réseau local, sur le net ?

    Enfin bref ... ça peut dépendre de plusieurs paramètres.

    Si ce sont les requetes qui sont longues essaie de les optimiser (suivant la bdd que tu utilise).

    Au fait c'est quel genre de requete ? insert, update, select ?
    Parce que n'oublies pas que tu peux appeler des procédures stockées sur la base de donnée. Tu peux aussi utiliser des traitements par lot (batch) mixés avec des preparedStatement ...
    Précise un peu ce point : c'est quoi tes requetes ? Comment tu les execute ?

    Sinon, solution de substitution, si il y a des ralentissement essaie de mettre une barre de progression ou un truc du genre pour que l'utilisateur sache que ça travaille et ai moins l'impression que c'est bloqué ... C'est toujours mieux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] application très lente?
    Par hamza_azerty dans le forum C#
    Réponses: 14
    Dernier message: 16/10/2014, 11h48
  2. application trés lente en php
    Par abdego dans le forum Langage
    Réponses: 10
    Dernier message: 16/05/2014, 11h35
  3. Application très lente au démarrage
    Par anissbenben dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/11/2012, 19h22
  4. Application très lente sous solaris
    Par pchoucine dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 01/10/2009, 15h50
  5. Application vb6 très lente
    Par guandal dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 06/02/2008, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo