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 :

Simplifier l'écriture des listeners avec EventHandler


Sujet :

Java

  1. #21
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    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.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  2. #22
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 636
    Points : 5 943
    Points
    5 943
    Par défaut
    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

  3. #23
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 552
    Points : 15 463
    Points
    15 463
    Par défaut
    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.

  4. #24
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 636
    Points : 5 943
    Points
    5 943
    Par défaut
    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

  5. #25
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    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.

  6. #26
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 636
    Points : 5 943
    Points
    5 943
    Par défaut
    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

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/09/2013, 18h20

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