web-dev-qa-db-fra.com

Combien coûte de lancer un objet?

Duplicata possible:
Performances de TypeCasting

Combien coûte la conversion en objet comme un autre objet?

CustomClass instance = GenericObject as CustomClass

Faut-il l'éviter à tout prix?

Vouloir voir comment les autres en pensent. Je suis sûr que c'est très situationnel.

37
bobber205

Vous devez éviter de vous inquiéter des implications en termes de performances de fonctionnalités de langage spécifiques, sauf si vous avez des preuves (mesures) spécifiques qu'elles causent réellement un problème.

Vos principales préoccupations devraient être l'exactitude du code et sa maintenabilité.

En règle générale, cependant, la conversion inutile peut souvent être évitée en C # simplement en appliquant de bonnes pratiques de programmation OO et en utilisant les génériques (en particulier les collections) de manière appropriée. Dans les cas où vous devez effectuer la diffusion, il est très peu probable qu'il s'agisse d'un goulot d'étranglement des performances, sauf si vous le faites en boucle serrée ou avec des types susceptibles de lever une exception de conversion non valide.

La plupart des problèmes de performances du monde réel découlent de choix d'algorithmes ou d'un manque de connaissance de la plate-forme elle-même - et non de fonctionnalités de langage spécifiques.

47
LBushkin

Non, cela ne devrait pas être évité à tout prix. Le casting n'est pas très cher. Bien sûr, si vous avez une boucle qui s'exécute un million de fois par seconde, il peut être judicieux d'éviter la conversion pour économiser des performances, sinon cela ne causera pas vraiment de problèmes de performances.

Le vrai problème avec le casting est qu'il s'agit d'une sécurité de type tricherie. Si vous n'y faites pas attention, il n'est pas trop difficile d'introduire des bogues ou de diminuer la lisibilité du code si vous diffusez des choses un peu partout.

29
Tamas Czinege

Si vous pouvez utiliser des génériques, c'est une meilleure solution que la coulée. La boxe et le déballage sont une opération coûteuse qui doit être évitée si possible. Le problème est parfois qu'il ne peut tout simplement pas être évité.

De plus, l'autre réponse ici mentionne que s'inquiéter de quelque chose comme la boxe est très trivial par rapport à des problèmes de performances spécifiques ou à la maintenabilité du code. Je suis tout à fait d'accord avec cela.

7
Lukasz

Généralement, le coût de la coulée d'un objet sur une base ad hoc est faible à grande échelle. Cependant, si vous effectuez plusieurs fois la conversion d'objets, c'est à ce moment-là que vous devez essayer de l'éviter si vous trouvez que c'est une cause d'un problème de performances.

Après tout, l'une des principales améliorations de .NET 1.1 à 2.0 a été l'introduction de génériques - cela a résolu le problème des listes d'objets fortement typées (par exemple, ArrayList = basé sur l'objet, List = liste typée)

5
AdaTheDev