web-dev-qa-db-fra.com

TargetedPatchingOptOut: "Performances essentielles pour aligner au-delà des limites de l'image NGen"?

J'ai parcouru certaines classes de framework en utilisant le réflecteur et remarqué qu'un certain nombre de méthodes et de propriétés ont l'attribut suivant

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

Je suis presque sûr d'avoir également vu le commentaire ci-dessus ailleurs et je ne l'ai jamais suivi.

Quelqu'un pourrait-il me dire ce que cela signifie dans le C # et dans tout autre contexte?

140

Il indique à NGen qu'il est OK d'insérer la méthode à laquelle il est appliqué même dans un assembly différent.

Par exemple:

  • String.Equals a [TargetedPatchingOptOut]
  • Vous écrivez un programme qui appelle String.Equals
  • Vous exécutez NGen sur ce programme pour des performances maximales
  • NGen alignera le String.Equals call, en remplaçant l'instruction d'appel de méthode par le code réel de la méthode.
    Les appels de méthode sont (légèrement) coûteux, il s'agit donc d'une amélioration des performances pour les méthodes fréquemment appelées.

Cependant, si Microsoft trouve une faille de sécurité dans String.Equals, ils ne peuvent pas simplement mettre à jour mscorlib.dll, car cela n'affectera pas l'Assemblée que vous venez de créer. (Puisqu'il a un code machine brut sans référencer String.Equals).
Je suppose que si cela devait se produire, la mise à jour de sécurité effacerait le magasin NGen.

Notez que cet attribut n'est utile que dans les assemblys .NET Framework. Vous n'en avez pas besoin par vous-même. Vous pouvez trouver plus d'informations à ce sujet ici: https://stackoverflow.com/a/14982340/631802

176
SLaks