140

使用反射器浏览了一些框架类,并注意到许多方法和属性具有以下属性

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

我很确定我在其他地方也看到了上述评论,但从未跟进。

有人可以告诉我这在 C# 和任何其他上下文中意味着什么吗?

4

1 回答 1

176

它告诉 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

于 2011-05-24T11:37:01.763 回答