TargetedPatchingOptOut: «Производительность, важная для встраивания через границы изображения NGen»? - PullRequest
140 голосов
/ 24 мая 2011

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

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

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

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

1 Ответ

176 голосов
/ 24 мая 2011

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

Например:

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

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

Обратите внимание, что этот атрибут полезен только всборки .NET Framework.Вам это не нужно по-своему.Вы можете найти больше информации об этом здесь: https://stackoverflow.com/a/14982340/631802

...