TargetedPatchingOptOut: “跨 NGen 图像边界内联的关键性能”?

通过使用反射器查看一些框架类,注意到一些方法和属性具有以下属性

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

我很确定我也在别的地方看到过上面的评论,但是我从来没有跟进过。

谁能告诉我这在 C # 和其他上下文中是什么意思?

13884 次浏览

它告诉 NGen 即使在不同的程序集中也可以内联它所应用的方法。

例如:

  • String.Equals[TargetedPatchingOptOut]
  • 编写一个调用 String.Equals的程序
  • 在这个程序上运行 NGen可以获得最大的性能
  • NGen 将内联 String.Equals调用,用方法中的实际代码替换方法调用指令。
    方法调用(稍微)开销较大,所以这对于频繁调用的方法来说是一个性能提升。

但是,如果微软在 String.Equals中发现安全漏洞,他们不能仅仅更新 mscorlib.dll,因为这不会影响您刚刚 NGen 化的程序集。(因为它有原始的机器代码而没有引用 String.Equals)。
我认为,如果这种情况真的发生了,安全更新将清除 NGen 存储。

注意,此属性仅在。NETFramework 程序集。你自己不需要。你可以在这里找到更多信息: https://stackoverflow.com/a/14982340/631802