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

C# Discussion :

Pertes de performances liées aux instructions try / catch


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Pertes de performances liées aux instructions try / catch
    Salut

    En C#, il semblerait qu'il y aient des pertes de perfos (en vitesse) liées à l'utilisation des instructions des try / catch.

    Par contre, je n'ai trouvé aucun article les chiffrant ...

    Quel est votre avis et votre expérience sur la question ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Et bien il ne faut placer un try catch que s'il est nécessaire, dans un premier temps... Si tu souhaites arreter la levée de l'Exception ou si tu souhaites t'en occuper c'est bien, mais si c'est pour faire un catch{ throw; } ca n'a pas énormément d'intérêt.


    Pour ce qui est des perfs et des chiffres purs, j'ai lu ici même (je ne sais plus de qui, et je ne connaissais pas ces sources -_-') que le try n'impactait pas réellement les performances, mais plutôt le catch lui même : la création de l'Exception, de la trace, du cast... Bref, la perf s'écroule lors de la levée de l'Exception (et ca se ressent humainement).
    (En même temps, c'est bien une exception, alors pourquoi cela devrait il speeder du feu de dieu? Il faut bien un contre coup à la possibilité d'intercepter une erreur sans tout péter...)

    Peut être que tu t'intéresse de plus prêts aux exceptions car tu les maitrises déjà, mais si ce n'est pas le cas, j'aime bien cet article :
    http://gilles.tourreau.fr/dotnet/dot...us_dotnet.html


    Je rajouterais tout de même que je suis presque sur qu'avant de s'intéresser au problème de perfs des try/catch il y a milles fois plus urgent à optimiser dans le dit code


    Mais cela dit, c'est vrai que quelques chiffres peuvent être sympa à analyser...

    Tu as un contexte particulier pour t'intéresser de prêts aux perfs des try/catch?

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Yep, comme le dit Chubyone, si une exception est levée, c'est qu'il y a un problème relativement grave, donc on est dans une phase où ce n'est pas la perf qui prime...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Ici tu as quelques tests / analyses / conclusions du pourquoi du comment, le tout vis à vis de la relativité du truc :

    http://www.codeproject.com/KB/except...rformance.aspx

    (en gros : qu'est ce que coute relativement une exception levée à cause d'un problème d'accès disque?...)

    Et il rappel une petite annotation que je ne trouvais plus :
    http://blogs.msdn.com/kcwalina/archi...onalError.aspx

    KRZYSZTOF CWALINA
    One of the biggest misconceptions about exceptions is that they are for “exceptional conditions.” The reality is that they are for communicating error conditions. From a framework design perspective, there is no such thing as an “exceptional condition”. Whether a condition is exceptional or not depends on the context of usage, --- but reusable libraries rarely know how they will be used. For example, OutOfMemoryException might be exceptional for a simple data entry application; it’s not so exceptional for applications doing their own memory management (e.g. SQL server). In other words, one man’s exceptional condition is another man’s chronic condition.
    Les exceptions : on tombe dedans des qu'on est un petit en .net, et je me demande si "les maitriser" ne relève pas de l'utopie...

    C'est une partie tellement énorme et si (trop) peu étudié...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Merci pour ces explications et ces liens , je vais les lire et je ferai mes commentaires ...

    En fait, mon problème, c'est surtout la perte éventuelle de perfs avec try / catch si il n'y a jamais d'exception levée !!! (on mettrait alors des try / catch au cas où ...). En particulier dans une boucle appelée des milliers de fois ...

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    on est à 10ms près sur certaines traitement, et on met des try catch dans 90% de nos sub et property quand meme
    (on ne veut pas que l'appli s'arrete non plus...)
    comme le prouve le lien codeproject de Chubyone, sans exception de levée y a pas énormément de différences ... dans le pire des cas mettre 30 euros de plus dans le pc pour avoir les meme perf et les try catch

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Par contre si tu dois faire un conversion utilise la méthode TryParse au lieu de catcher la conversion, tu aura de meilleures performances.

Discussions similaires

  1. Optimiser les performances try/catch ?
    Par KiLVaiDeN dans le forum Langage
    Réponses: 4
    Dernier message: 14/01/2014, 13h47
  2. Try/Catch qui exclue certaines instructions?
    Par kZn.13 dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 12/06/2008, 22h12
  3. problème avec l'instruction try catch endtry
    Par jabulon dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/01/2008, 11h33
  4. Réponses: 13
    Dernier message: 03/08/2006, 16h31
  5. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23

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