Différence Entre les Invoquer et de DynamicInvoke
Quelle est la différence entre les Invoquer et de DynamicInvoke dans délégués? Merci de me donner quelques exemple de code qui expliquent la différence entre les deux méthodes.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous avez un délégué exemple, vous pouvez connaître le type exact, ou vous pourriez juste savoir que c'est un
Delegate
. Si vous connaissez le type exact, vous pouvez utiliserInvoke
, qui est très rapide - tout est déjà pré-validés. Par exemple:Cependant! Si vous savez juste qu'il est
Delegate
, il a à régler les paramètres etc manuellement, cela peut impliquer des unboxing, etc - beaucoup de réflexion est en cours. Par exemple:Remarque j'ai écrit le
args
long de la main pour indiquer clairement qu'unobject[]
est impliqué. Il y a beaucoup de frais supplémentaires ici:MethodInfo
En gros, éviter de
DynamicInvoke
quand vous le pouvez.Invoke
est toujours préférable, à moins que vous ne disposez que d'unDelegate
et unobject[]
.Pour une comparaison de performances, la suivante en mode de diffusion à l'extérieur du débogueur (une console exe) imprime:
Code:
Invoke: 0,0478ms, DynamicInvoke: 0,053ms
. Pourquoi êtes-vous en les comparant plus de 1 appel? Et pourquoi le premier prend plus de temps que le deuxième appel de la fonction?