p
u
b
l
i
c
i
t
é
publicité
+ Répondre à la discussion Actualité déjà publiée
Page 2 sur 2 PremièrePremière 12
  1. #21
    Modérateur
    Avatar de Robin56
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2009
    Messages
    4 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2009
    Messages : 4 214
    Points : 10 379
    Points
    10 379

    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.

  2. #22
    Expert Confirmé Sénior
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2005
    Messages
    2 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 638
    Points : 5 912
    Points
    5 912

    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 ).

  3. #23
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 190
    Points : 7 072
    Points
    7 072

    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é Sénior
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2005
    Messages
    2 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 638
    Points : 5 912
    Points
    5 912

    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 .

  5. #25
    Membre Expert
    Inscrit en
    mai 2006
    Messages
    1 210
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 1 210
    Points : 1 695
    Points
    1 695

    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é Sénior
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2005
    Messages
    2 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 638
    Points : 5 912
    Points
    5 912

    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 ^^.

Discussions similaires

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

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