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

Langage Java Discussion :

Une addition qui prend ~500ms ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut Une addition qui prend ~500ms ?
    Bonjour à tous,

    je rencontre un truc qui me surprend, voir me choque... Une addition qui plombe mes performances..
    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
     
    public class Truc{
     
    static int PENALITE=200;
     
    Truc(){..}
     
    ...
     
    public int getCalculLent(Objet a){
    return Machin.getInstance().getCalcul(a)+PENALITE;
    }
     
    public int getCalcul(Objet a){
    return Machin.getInstance().getCalcul(a);//+PENALITE;
    }
    Entre getCalcul et getCalculLent, j'ai une différence moyenne de 500ms, qui est vraiment énorme !
    Quelqu'un aurait une piste/explication ?

  2. #2
    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,


    Comment tu calcules cette différence ???


    a++

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut
    par une différence de Date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long d0= new Date().getTime();
    long d1= new Date().getTime();
    long temps=d1-d0;
    J'ai oublié de préciser que j'appelle plusieurs fois la méthode getCalcul(a) ;
    (c'est pour un Dijkstra)

  4. #4
    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
    Et donc ? plus précisément il faudrait voir ton code de test...

    De même que sur "Machin.getInstance().getCalcul(a)" !

    a++

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut
    Au niveau des tests j'avoue je fais pas ça très proprement, j'affiche mes temps sur 100 trajets aléatoires et je calcule la moyenne a l'aide d'excel

    Je résume en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (i=0;i<100;i++){
      Sommet a=Graphe.getSommetAleatoire();
      Sommet b=Graphe.getSommetAleatoire();
      long d0=new Date().getTime();
      dijkstra (a,b);
      long temps=new Date().getTime()-d0;
      sysout(temps);
    }
    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
     
    dijkstra(Sommet a, Sommet b){
    while(true){
      ...
      Sommet test=reference.getSuivant();
      ...
      Arc arc=graphe.getArc(reference,test);
      int poidsArc=Graphe.getInstance().getPoids(arc); 
      ...
      if (poidsArc<0)
         continue;//arc non valable
      ...
      if (test.totalPoids>poidsArc){
         test.precedent=reference;
         test.totalPoids=poidsArc;
      }
     
      if (test==b){
         .....
         return;
      }
    }
    Mon graphe a environ 800 sommets, 6000 arêtes (réseau de bus), donc un grand nombre d'appels à getPoids()

    J'espère que ça va pouvoir t'aider (à m 'aider )

  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
    Citation Envoyé par jarbi62 Voir le message
    Je résume en gros :
    Disons qu'il y a plusieurs éléments qui pourrait fausser un test, donc sans avoir la totalité du code et de son exécution difficile de savoir si c'est correct ou pas.

    Tu dis avoir une différence de 500ms en moyenne sur une simple addition et cela me semble ahurissant. A mon avis il doit y avoir un gros problème quelque part dans ton test.

    a++

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour info, pour ce genre de mesures, il vaut mieux utiliser System.currentTimeMillis().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long d0= System.currentTimeMillis();
    long d1= System.currentTimeMillis();
    long temps=d1-d0;
    Ça fait pareil sauf que ça n'instancie pas de Date pour rien. Gain à l'instanciation et gain au garbage.

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/01/2009, 14h44
  2. Une addition qui se passe mal
    Par Romanodi13 dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 30/12/2008, 13h20
  3. [VS2005-VS2008] Une solution qui prend tout le CPU
    Par ben_popcorn dans le forum Visual Studio
    Réponses: 13
    Dernier message: 23/12/2008, 08h58
  4. Création d'une fonction qui prend en argument une liste de cellule
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2007, 20h49
  5. Réponses: 8
    Dernier message: 30/11/2005, 10h00

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