Précédent   Forum du club des développeurs et IT Pro > Java > Général Java
Général Java Java SE, Java ME, APIs, Persistance, JDBC, Spring, XML. Avant de poster -> FAQ Java, Sources Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 05/07/2012, 14h27   #21
Robin56
Modérateur
 
Avatar de Robin56
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 2 865
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 2 865
Points : 7 477
Points : 7 477
Citation:
Envoyé par thelvin Voir le message
Un petit problème avec ce EventHandler, c'est que du coup le compilateur ne vérifie pas si la méthode "foo" existe. L'erreur se verra à l'exécution, pas à la compilation.
En effet, c'est l'un des points qui me bloque le plus dans son utilisation.
__________________
Robin56 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2012, 14h29   #22
le y@m's
Rédacteur/Modérateur
 
Avatar de le y@m's
 
Homme Yann D'Isanto
Ingénieur développement logiciels
Inscription : février 2005
Messages : 2 642
Détails du profil
Informations personnelles :
Nom : Homme Yann D'Isanto
Âge : 30
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2005
Messages : 2 642
Points : 6 157
Points : 6 157
Citation:
Envoyé par Robin56 Voir le message
Citation:
Envoyé par thelvin Voir le message
Un petit problème avec ce EventHandler, c'est que du coup le compilateur ne vérifie pas si la méthode "foo" existe. L'erreur se verra à l'exécution, pas à la compilation.
En effet, c'est l'un des points qui me bloque le plus dans son utilisation.
Je suis aussi d'accord avec ce point, c'est vrai que c'est un peu frustrant de se rendre compte à l'exécution qu'on a fait une faute de frappe dans le nom de la méthode (vive les tests unitaires ).
__________________
Je ne répondrai à aucune question technique par MP.

Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
Enfin, quand une solution a été trouvée à votre problème
pensez au tag

Cours Dvp : http://ydisanto.developpez.com
Blog : http://yann-disanto.blogspot.com/
Page perso : http://yann-disanto.fr
le y@m's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2012, 14h30   #23
Uther
Expert Confirmé Sénior
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 688
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 688
Points : 5 141
Points : 5 141
Citation:
Envoyé par le y@m's
Je ne sais pas comment tu as fait ton test mais je n'ai absolument pas autant de différence.
...
Tu n'aurais pas fait une boucle par hasard ? (dans ce cas effectivement c'est normal que la différence soit si grande)
Ce que j'ai mesuré est seulement la différence 10 million d'appel à un invoke() et autant d'appels direct a la méthode pour se faire une idée générale de la différence de vitesse entre appel direct et introspection.

On est d'accord que si on fait des appels ponctuels à un traitement qui dépasse de toute façon quelques dizaines de millisecondes, ce qui sera généralement le cas, on se fiche royalement de la différence.

Citation:
Envoyé par le y@m's
Oui mais pourquoi tu crées un objet Method ?
Ce n'est pas ce que va faire l'EventHandler. L'EventHandler va se servir des string pour récupérer les méthodes sur les objets (target pour l'action et event pour la propriété).

Fait le test en comparant vraiment ce dont il est question (l'appel à la méthode du listener) .
C'était juste pour info, et c'est pour cela que je ne l'avait pas précisé à la base
Je me doute bien que le Event handler doit avoir déjà récupéré l'objet Method qu'il utilise lors de l'instanciation.
Uther est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2012, 14h39   #24
le y@m's
Rédacteur/Modérateur
 
Avatar de le y@m's
 
Homme Yann D'Isanto
Ingénieur développement logiciels
Inscription : février 2005
Messages : 2 642
Détails du profil
Informations personnelles :
Nom : Homme Yann D'Isanto
Âge : 30
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2005
Messages : 2 642
Points : 6 157
Points : 6 157
Citation:
Envoyé par Uther Voir le message
Citation:
Envoyé par le y@m's
Je ne sais pas comment tu as fait ton test mais je n'ai absolument pas autant de différence.
...
Tu n'aurais pas fait une boucle par hasard ? (dans ce cas effectivement c'est normal que la différence soit si grande)
Ce que j'ai mesuré est seulement la différence 10 million d'appel à un invoke() et autant d'appels direct a la méthode pour se faire une idée générale de la différence de vitesse entre appel direct et introspection.

On est d'accord que si on fait un appel ponctuel à un traitement qui dépasse quelque centaines de millisecondes, ce qui sera généralement le cas, on se fiche royalement de la différence.
Ah je comprends mieux ta différence de temps d'exécution. Comme tu l'avais formulé ce n'était pas évident du tout que tu avais fait ton test dans une boucle. Ca laissait plutôt à penser qu'il s'agissait d'un simple appel, d'où mon étonnement .

Donc oui avec une boucle il vaut mieux éviter l'utilisation de l'EventHandler, mais dans un cas d'utilisation simple la différence reste négligeable .
__________________
Je ne répondrai à aucune question technique par MP.

Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
Enfin, quand une solution a été trouvée à votre problème
pensez au tag

Cours Dvp : http://ydisanto.developpez.com
Blog : http://yann-disanto.blogspot.com/
Page perso : http://yann-disanto.fr
le y@m's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2012, 15h00   #25
hwoarang
Membre Expert
 
Inscription : mai 2006
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 1 028
Points : 1 210
Points : 1 210
Citation:
Envoyé par le y@m's Voir le message
Je ne sais pas comment tu as fait ton test mais je n'ai absolument pas autant de différence.
Pour un traitement de 100ms, l'invocation par classe anonyme est de 100ms et avec l'EventHandler 120ms.
Pour un traitement de 200ms, l'invocation par classe anonyme est de 100ms et avec l'EventHandler 220ms.
Donc le surcoût est relativement faible.
Tu n'aurais pas fait une boucle par hasard ? (dans ce cas effectivement c'est normal que la différence soit si grande)
Ce qui est interessant c'est de savoir la différence de temps d'execution entre un appel de fonction via l'EventHandler et via un appel direct. Et ca ne dépend pas du temps de traitement qui sera fait dans la fonction cible. Pour le tester, il faut effectivement faire une boucle.

Citation:
Envoyé par le y@m's Voir le message
Ce qui compte c'est l'expérience utilisateur. Même un x30 peut ne pas être un problème.
Une invocation de 10ms, avec un facteur de x30 devient 300ms. Cela peut rester acceptable pour un clic bouton.
Tout dépendant de l'utilisation, il ne faut pas avoir peur d'allonger un peu un temps d'exécution si celui-ci reste acceptable (non perçu par l'utilisateur, en dessous de limites contractuelles, etc.).
Oui, on est d'accord. Et dans le cas de l'EventHandler, comme c'est une réaction à un evenement utilisateur, un temps de réaction de 5 ms ou de 150ms (valeurs prises au pif) ne fait pas une grosse différence. Mais dans un cas plus général, par rapport à la reflexion, c'est quand meme interessant à savoir qu'il y a une aussi grosse différence.
hwoarang est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2012, 15h50   #26
le y@m's
Rédacteur/Modérateur
 
Avatar de le y@m's
 
Homme Yann D'Isanto
Ingénieur développement logiciels
Inscription : février 2005
Messages : 2 642
Détails du profil
Informations personnelles :
Nom : Homme Yann D'Isanto
Âge : 30
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2005
Messages : 2 642
Points : 6 157
Points : 6 157
Citation:
Envoyé par hwoarang Voir le message
Ce qui est interessant c'est de savoir la différence de temps d'execution entre un appel de fonction via l'EventHandler et via un appel direct. Et ca ne dépend pas du temps de traitement qui sera fait dans la fonction cible. Pour le tester, il faut effectivement faire une boucle.
Le test dépend de ton cas d'utilisation. Pour l'EventHandler le cas d'utilisation est justement de ne pas l'utiliser dans une boucle. Du fait de la reflexion on sait déjà qu'il y aura un surcoût pour chaque appel et donc que son utilisation dans une boucle est à proscrire. Donc ce n'est pas très utile de faire ce test puisqu'on sait déjà qu'on aura des perfs minables et qu'on ne choisira pas cette solution (EventHandler pour le cas d'une boucle).

Ce qui est interessant par contre c'est de connaitre le surcoût pour le cas d'utilisation, c'est à dire sur un appel simple .

Après on peut toujours faire le test avec une boucle mais bon ya pas vraiment de surprise ^^.
__________________
Je ne répondrai à aucune question technique par MP.

Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
Enfin, quand une solution a été trouvée à votre problème
pensez au tag

Cours Dvp : http://ydisanto.developpez.com
Blog : http://yann-disanto.blogspot.com/
Page perso : http://yann-disanto.fr
le y@m's est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web