Quelle est la différence entre ces syntaxes ?
Code:
1
2
3
4
5
6 try { ... } catch {}
Code:
1
2
3
4
5
6 try { ... } catch (Exception) {}
Au niveau de la mémoire, est qu'il y a une différence ?Code:
1
2
3
4
5
6 try { ... } catch (Exception e) {}
Version imprimable
Quelle est la différence entre ces syntaxes ?
Code:
1
2
3
4
5
6 try { ... } catch {}
Code:
1
2
3
4
5
6 try { ... } catch (Exception) {}
Au niveau de la mémoire, est qu'il y a une différence ?Code:
1
2
3
4
5
6 try { ... } catch (Exception e) {}
Salut,
Il suffit de faire une console avec ce scriptpour constater l'impact dans les compteurs de performance du CLR. Apparement, il n'y a pas de différences entre ces trois écritures.Code:
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; } }
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+
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.