Je mets à jour mon générateur de code et j'ai le choix entre l'implémentation d'un stub de méthode en tant que méthode virtuelle dans une classe de base ou une méthode partielle dans le code généré. Y a-t-il une différence de performance entre les deux?Quelle est la différence de performance entre une méthode partielle et la substitution d'une méthode virtuelle dans une classe de base?
Répondre
Si vous mettre en œuvre la méthode partielle, alors je m'attendrais à ce qu'il n'y ait pas de différence notable. C# utilise toujours callvirt
pour appeler les méthodes d'instance, même si elles ne sont pas virtuelles, il n'y aura donc pas beaucoup de changement.
Si vous ne pas implémenter la méthode partielle, l'appel lui-même est retiré - donc il n'y a jamais une pile pour préparer, etc. Ce sera infintessimally plus rapide, ce qui est pourquoi il est très bien pour le code généré pour inclure un nombre ridicule de stubs de méthode partielle: si vous ne les utilisez pas, ils n'existent pas.
La plus grande raison d'utiliser des méthodes partielles est simplement de ne pas avoir à sous-classer l'objet. Vous ne pouvez pas déclarer les parties "abstract"/"virtual" et "override" d'une méthode virtuelle dans la même classe (même partielle). Les méthodes partielles résout ce problème, et le problème des points d'extensibilité de la publicité (sans avoir à utiliser la réflexion). Très bon pour les outils de génération de code ;-
Il peut y avoir une différence mineure, mais elle devrait être négligeable sauf si la méthode est appelée de façon répétée dans une boucle.
Les méthodes partielles ne sont que du sucre syntaxique permettant la division d'une classe entre plusieurs fichiers.
Lorsqu'ils sont compilés, ils sont exactement les mêmes que si toutes les méthodes avaient été dans le fichier. En d'autres termes, le seul 'ralentissement' que vous êtes susceptible de voir avec une méthode partielle est le temps de compilation légèrement plus long :)
EDIT: Et comme la réponse ci-dessous le dit, ils ne sont même pas là s'ils peuvent ' t être trouvé lors de la compilation.
- 1. En C#, quelle est la différence entre un destructeur et une méthode Finalize dans une classe?
- 2. méthode abstraite dans une classe virtuelle
- 3. Différence entre "__method__" et "méthode"
- 4. Méthode d'extension de performance par rapport à la méthode d'instance
- 5. Dans une base de données Oracle, quelle est la différence entre ROWNUM et ROW_NUMBER?
- 6. Appeler méthode de classe de base de la méthode surchargée dans la sous-classe
- 7. Quelle est la différence entre dict() et {}?
- 8. Substitution de la méthode de peinture DataGridViewTextBoxCell
- 9. Quelle est la différence entre une classe abstraite et une mixine?
- 10. En Java, comment appeler la méthode d'une classe de base à partir de la méthode de substitution dans une classe dérivée?
- 11. Quelle est la différence entre la classe Query et la classe Gqlquery dans Google App Engine?
- 12. quelle est la différence entre:.! et: r !?
- 13. Quelle est la différence entre = et: =
- 14. Quelle est la différence entre une analyse de table et une analyse d'index clusterisée?
- 15. Quelle est la différence entre Int et Integer dans Scala?
- 16. Pourquoi Object.ToString est-il une méthode virtuelle?
- 17. Différence entre la méthode OnLoad et l'événement Load?
- 18. Quelle est la différence entre une propriété de dépendance et une propriété jointe dans WPF?
- 19. Quelle est la différence entre include et extend dans Ruby?
- 20. Quelle est la différence entre une bibliothèque de contrôle utilisateur et une bibliothèque de contrôle personnalisée?
- 21. Quelle est la différence entre synchronisation synchronisée et statique?
- 22. Comment faire la distinction entre une fonction et une méthode de classe?
- 23. Quelle est la différence entre une application de service WCF et une bibliothèque de service WCF?
- 24. Quelle est la différence entre une vue de couche de base CoreAnimation et une vue d'hébergement de couche?
- 25. Quelle est la différence entre Keyboard.Focus (point) et item.Focus()?
- 26. Quelle est la différence entre latin1_general_ci et utf8_bin dans MYSQL
- 27. Quelle est la différence entre propriétaire et utilisateur (WindowsIdentity)?
- 28. Quelle est la différence entre une nouvelle Action() et une lambda?
- 29. Comment implémenter une classe de base avec une méthode et forcer la classe dérivée à la remplacer?
- 30. Quelle est la différence entre Server.MapPath et HostingEnvironment.MapPath?