2009-12-17 4 views

Répondre

44

Vous devriez éviter de vous soucier des implications en termes de performances de fonctionnalités linguistiques spécifiques, à moins que vous n'ayez des preuves spécifiques (mesures) indiquant qu'elles causent réellement un problème.

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

À titre d'observation générale, cependant, la coulée inutile peut souvent être évité en C# simplement en appliquant de bonnes pratiques de programmation orientée objet et l'utilisation de génériques (en particulier les collections) de manière appropriée. Dans les cas où vous avez besoin d'effectuer un casting, il est hautement improbable qu'il s'agisse d'un goulot d'étranglement des performances, sauf si vous le faites dans une boucle étroite ou avec des types susceptibles de générer une exception de transtypage invalide.

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

+50

Peut-être que vous pourriez ajouter une petite chose à la fin au sujet de la surcharge du type casting. C'est bon d'avoir des conseils, mais ça ne répond pas à la question. –

+0

Une bonne réponse à une question différente. – Acidic

18

Non, cela ne doit 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 diffusion pour économiser de la performance, sans quoi cela ne causera pas vraiment de problèmes de performances.

Le vrai problème avec le moulage est qu'il s'agit d'une sécurité de type triche. Si vous ne faites pas attention, il n'est pas trop difficile d'introduire des bogues ou de diminuer la lisibilité du code si vous jetez des objets partout.

4

Si vous pouvez utiliser des génériques, c'est une meilleure solution que le moulage. Boxe et unboxing est une opération coûteuse qui devrait être évitée si possible. Le problème est parfois qu'il ne peut tout simplement pas être évité.

Aussi l'autre réponse ici mentionné mentionné que s'inquiéter de quelque chose comme la boxe est très trivial par rapport aux problèmes de performance spécifiques ou la maintenabilité du code. Je suis complètement d'accord avec cela.

+1

Je ne pense pas que la boxe s'applique ici parce que OP demande de jeter l'objet à l'objet, pas la valeur à l'objet. –

2

Généralement, le coût de moulage d'un objet sur une base ad hoc est faible à grande échelle. Cependant, si vous lancez plusieurs fois des objets plusieurs fois, alors vous devriez essayer de l'éviter si vous trouvez que c'est une cause d'un problème de performance.

Après tout, l'une des principales améliorations de .NET 1.1 à 2.0 est l'introduction de médicaments génériques - ce abordé la question de fortement typé listes d'objets (par exemple ArrayList = basé sur l'objet, List = liste dactylographiée)

Questions connexes