-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: PRB de performance lors de la récupération d'un objet
PostPosted: Tue Aug 02, 2005 9:45 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
Bonjour à tous,

je suis super triste de voir le temps que met Hibernate pour récupérer un
objet. J'utilise ce code :

SessionManager session = new SessionManager();

try {
session.beginSessionStandalone();
session.beginTransaction();

long cputime = System.currentTimeMillis();
TypeTacheElementaire typeTacheCourant = (TypeTacheElementaire) session.getSession()
.get(TypeTacheElementaire.class, new Long(1));
long cpuend = System.currentTimeMillis();
System.out.println("Récupération en " + (cpuend - cputime) + "ms");
}
catch (Exception e) {
session.setCommit(false);
e.printStackTrace();
} finally {
session.endTransaction();
session.endSession();
}

Hibernate met 172ms pour récupérer mot objet. La requête généré derrière est parfaite :

select typetachee0_.type_tache_elementaire_id as type_tac1_0_, typetachee0_.nom as nom0_ from TYPE_TACHE_ELEMENTAIRE typetachee0_ where typetachee0_.type_tache_elementaire_id=?

Voici mon mapping :

<class
name="TypeTacheElementaire"
table="TYPE_TACHE_ELEMENTAIRE"
>
<id
name="typeTacheElementaireId"
type="java.lang.Long"
column="type_tache_elementaire_id"
>
<generator class="sequence">
<param name="sequence">S_TYPE_TACHE_ELEMENTAIRE</param>
</generator>
</id>

<property
name="nom"
type="java.lang.String"
column="nom"
not-null="true"
length="60"
/>

<!-- Associations -->


</class>

Je travaille avec Oracle et Hibernate 2.1.6. Cette requête ne met que
0.006 sec sous DBVisualizer. Comment puis-je faire ?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 02, 2005 10:47 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
As tu essayé de faire une première fois la requête et de mesurer le second essai.

Si tu utilises java5 utilises plutot nanoTime pour faire tes mesures et fait la requête n fois et fait la moyenne sur tes n fois

Il est fort possible que tu mesures des temps d'initialisation d'hibernate ou des statement

seb


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 02, 2005 11:36 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
Ce que je souhaite mesurer c'est le temps mis par le Framework pour me
donner l'info que je cherche. Même si la reflection est utilisée par Hibernate
je trouve que l'écart entre DBVisualizer (voire même Toad) et Hibernate
est énorme. Je travaille en outre avec java 1.4. Et dans ce cas, comment
puis-je faire pour mesurer le temps mis par Hibernate pour le récupération
de l'info ?

---
Seb (aussi)


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 02, 2005 11:53 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
Je ne parles pas de la reflexion, je parles de l'initilisation du framework. La première requête est toujours beaucoup plus coûteuse que les suivantes

Perso quand je travaillais avec le jdk 1.4, je faisais mon test n fois dans une boucle et je faisais la moyenne (je faisais également un test avant la boucle pour être sûr qu'il n'y avait pas d'impact de l'initialisation sur mes tests).

Sinon, si c'est toujours pourri, utilise un profiler pour voir où est passé le temps. Yourkit a un produit génial qui pour l'instant est libre d'accès car en early access.

Seb


Top
 Profile  
 
 Post subject:
PostPosted: Thu Aug 04, 2005 8:24 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Honetement, ton test de perf ne veut absolument rien dire. pas de boucle, tu compare la requete pure avec l'instanciation de l'obket et son peuplement, le scenario n'est pas représentatif d'une appli même simple.

http://www.hibernate.org/157.html

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Mon Aug 08, 2005 7:50 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
Je suis entièrement d'accord avec toi Emmanuel. Ce fragment ne code ne
peux absolument pas servir de test de perf. Je cherche en outre des so-
lutions qui me permetteraient d'avoir une idée du coût de mes requettes
en base par Hibernate, de leur temps d'éxecution et du temps de récupé-
ration des objets obtenus. Scesbron m'a fourni une piste mais j'en cherche
toujours d'autres. Gavin dit dans son article que la solution qu'il a essayé
n'est pas trés éfficace. Y'en a-t-il d'autres ?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Aug 08, 2005 7:59 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Quel article?

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.