2009-08-14 6 views
0

Je suis maintenant une application qui a été conçu comme ceci:Virtual vs Interface poco, quoi de plus rapide?

messy code --abuses--> simplePoco (POCO data capsule) 

La capsule de données est une classe simple avec beaucoup de accesseurs (propriétés) Il utilise un cadre de DI et d'utiliser systématiquement le conteneur IoC pour fournir instances de la capsule de données (chanceux moi!).

Le problème est, je dois mettre en place un mécanisme "de notification de changement" dans simplePoco

messy code --abuses--> simplePoco 
       | 
       V 
     changes logger, 
     status monitor 
    (I wanna know about changes) 

J'ai quelques options:

  • introduisons une IPoco et modifier le code désordre, donc que je peux avoir simplePoco pour la vitesse ou notifyingPoco quand je veux changer la notification (sélectivement lent)? ou ...

  • Rendez tout virtuel et lancez ma propre classe personnalisée notifyingPoco au-dessus de simplePoco (encore plus lent)?

  • que je ne connais pas?

Il est un système client/serveur, mais je suis juste en train de modifier la partie serveur donc si possible, je préfère pas toucher le code désordre ou le code client (il y a serializers et réflexions et effrayant ninja stuffs ...) pour ne pas casser accidentellement quoi que ce soit.

L'utilisation d'une interface empêcherait-elle JIT de définir les appels à getter/setter?

Quelle est la meilleure façon de procéder étant donné que les instances simplesPoco sont lourdement abusé?

Répondre

3

Tout type d'appel virtuel (que ce soit sur l'interface ou directement sur une classe - tous les appels d'interface sont virtuels!) Ne sera pas inséré par CLR JIT. Cela dit, les appels d'interface sont légèrement plus lents car ils doivent toujours passer par le chemin potentiellement distant/mandaté, et parce qu'ils doivent déplacer this -pointer pour pointer au début de la classe avant d'entrer dans le corps de la fonction. Les appels virtuels directement sur les membres de la classe ne doivent jamais effectuer le changement, et, à moins que la classe ne soit dérivée de MarshalByRefObject, n'appuyez pas sur les vérifications par proxy. Cela dit, les différences de performance entre ces deux éléments sont très mineures. Vous devriez donc probablement les ignorer et vous concentrer sur la propreté de la conception et la facilité de mise en œuvre à la place.

Questions connexes