Toutoune DevZone

.NET (C#)

Cast versus As

Salut à toi codeur fou,

Après un débat mouvementé sur le cast et quelques tests pour vérifier tout ça, voici de quoi épater tous tes potes !
(Je m'excuse, mes soirées sont parfois longues en ce moment)

Mes tests ont porté sur les différences entre :

MaClasse a = (MaClasse) b;

et...

MaClasse a = b as MaClasse;

Résultat: le cast est plus rapide que le as de 8% en moyenne...

En espérant que cela vous soit utile !

Commentaires

Djé-Force a dit :

En effet, et je pense que la différence vient du fait que le As est 'plus intelligent' : au lieu de lever une exception si la conversion de types échoue, le As renvoie null.

Mais 8%, est-ce le prix à payer pour un tel confort ? D'un autre côté, avec 8% de quelques microsecondes en plus, il faut être casteur fou pour y perdre en perfs globales !

# février 7, 2007 9:39

Styx31 a dit :

Clairement, le cast est la version la moins couteuse. Le "as" permet le luxe d'avoir un retour null dans le cas d'un cast échoué.

Sachant cela, il parait logique de faire des cast dans la mesure du possible pour améliorer les perfs. Les 8% ne m'étonnent pas plus que ça.

# février 7, 2007 10:37

Toutoune_31 a dit :

Djé, enfait le "as" est mieux dans le cas où tu ne connais pas d'avance le type de l'objet à caster.

# février 9, 2007 9:24

Vko a dit :

Ce type de comparatif n'est pas vraiment pertinent dans le sens ou les deux opérateurs n'ont pas du tout la même utilité.

On fait un cast lorsqu'on est sûr que le cast va passer (faire un try/catch n'est pas une bonne facon de faire).

On fait un as dans le cas ou on souhaite savoir si l'objet est d'un type particulier (plus mieux que l'opération is car un seul cast est fait).

Si on voulait vraiment comparer, il faudrait faire en sorte d'avoir des cast invalides. Dans ce cas, on pourrait noter un énorme gain du 'as' car le levage d'exceptions est largement, largement plus lourd qu'un simple 'if'.

Voila voila !

# février 14, 2007 7:36

Toutoune_31 a dit :

On peut aussi imaginer utiliser le "is" voire la réfléxion pour tester si un objet est d'un type donné avant de le caster.

# mars 6, 2007 9:49

Benchmark de code C# - Toutoune DevZone a dit :

Pingback depuis  Benchmark de code C# - Toutoune DevZone

# février 13, 2008 4:14
Laissez un commentaire

(requis) 

(requis) 

(optionel(le))

(requis)