TargetedPatchingOptOut: "Производительность критична для встроенных границ графических изображений NGen"?

Просматривая некоторые классы каркасов с использованием рефлектора и заметив, что ряд методов и свойств имеет следующий атрибут

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

Я уверен, что я также видел вышеупомянутый комментарий где-то в другом месте и никогда не следил за ним.

Может кто-нибудь, пожалуйста, скажите мне, что это означает в С# и в любом другом контексте?

Ответ 1

Он говорит NGen, что в порядке, чтобы встроить метод, который он применял даже в другой сборке.

Например:

  • String.Equals имеет [TargetedPatchingOptOut]
  • Вы пишете программу, которая вызывает String.Equals
  • Вы запускаете NGen в этой программе для максимальной производительности
  • NGen встроит вызов String.Equals, заменив команду вызова метода на фактический код в методе.
    Вызов метода (немного) дорогой, поэтому это повышение производительности для часто называемых методов.

Однако, если Microsoft обнаружит дыру безопасности в String.Equals, они не могут просто обновить mscorlib.dll, потому что это не повлияет на сборку, которую вы только NGen'd. (Так как у него есть исходный машинный код без ссылки String.Equals).
Я предполагаю, что если это произойдет, обновление безопасности очистит хранилище NGen.

Обратите внимание, что этот атрибут полезен только в сборках .NET Framework. Вы не нуждаетесь в этом сами. Вы можете найти более подробную информацию об этом здесь: fooobar.com/info/44045/...