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

ASP.NET Discussion :

Question de syntaxe sur try catch


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Points : 95
    Points
    95
    Par défaut Question de syntaxe sur try catch
    Quelle est la différence entre ces syntaxes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    ...
    }
    catch
    {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    ...
    }
    catch (Exception)
    {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    ...
    }
    catch (Exception e)
    {}
    Au niveau de la mémoire, est qu'il y a une différence ?

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Il suffit de faire une console avec ce script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    for (int i = 0; i < 14000; i++)
    {
        try
        {
            throw new DivideByZeroException();
        }
        catch
        {
            //throw;
        }
    }
    for (int i = 0; i < 14000; i++)
    {
        try
        {
            throw new DivideByZeroException();
        }
        catch (DivideByZeroException)
        {
            //throw;
        }
    }
    for (int i = 0; i < 14000; i++)
    {
        try
        {
            throw new DivideByZeroException();
        }
        catch (DivideByZeroException e)
        {
            //throw;
        }
    }
    pour constater l'impact dans les compteurs de performance du CLR. Apparement, il n'y a pas de différences entre ces trois écritures.
    En l'occurrence, je ne vois aucune différences. Les générations d'objets remplissent la pile et c'est tout.

    Ce test n'est peut-être pas valable...

    A+
    Images attachées Images attachées  

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    L'exception est générée par le code qui produit l'erreur : une classe (qui dérive de Exception) est donc toujours instanciée en mémoire, que l'exception soit ensuite gérée ou non.

    Dans les deux premiers cas, aucune référence vers l'exception n'est retournée au bloc catch et la mémoire utilisée par l'exception sera récupérée lors du prochain GC.Collect (qui pourrait théoriquement se produire avant la fin du bloc catch). Dans le dernier cas, une référence est créé vers l'exception puis détruite à la fin du catch, ce qui permettra également à la mémoire d'être récupérée au prochain GC.Collect. Le seul surcoût mémoire de la 3è écriture est la création d'une référence supplémentaire ce qui est négligeable.

    Seule la 3è écriture permet par contre d'avoir accès à l'exception produite.

Discussions similaires

  1. Interrogation sur : Try.Catch.Finally
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2008, 11h22
  2. question de syntaxe sur variable
    Par mydev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/04/2007, 14h05
  3. Réponses: 13
    Dernier message: 03/08/2006, 16h31
  4. question toute simple sur la syntaxe
    Par calitom dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2006, 16h26
  5. Erreur de runtime sur un try ... catch
    Par Floréal dans le forum C++
    Réponses: 14
    Dernier message: 09/09/2005, 19h15

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