gpt4 book ai didi

.net - 跨程序集的 native 镜像内联方法

转载 作者:行者123 更新时间:2023-12-03 23:46:29 25 4
gpt4 key购买 nike

another question 中所述, Ngen 通常只允许在方法具有 TargetedPatchingOptOutAttribute 的情况下跨程序集内联方法。放。

但是对于 hard bound 也是如此吗?使用 DependencyAttribute 组装与 LoadHint.Always ?

编辑:也许我最初的问题的答案是否定的,否则 TargetedPatchingOptOutAttribute 将毫无意义。在 mscorlib 中使用,因为该程序集始终是硬绑定(bind)的(它具有 DefaultDependencyAttribute 集)。所以我想改写我的问题:TargetedPatchingOptOutAttribute 是在程序集的 native 图像中内联方法的唯一方法是什么?

最佳答案

TLDR 版本:不要在意TargetedPatchingOptOutAttribute ,它应该只在 .NET Framework 程序集中使用。自开发程序集的方法内联与 Ngen 和 JIT 相同。

好像是 other question导致我做出一个完全错误的假设。我们的 中的方法拥有组件 跨原生图像边界内联,即使它们既不是硬绑定(bind)也没有 TargetedPatchingOptOutAttribute放。此属性仅影响 .NET Framework 程序集。
A Microsoft blog post关于 TargetedPatchingOptOutAttribute 有一个相当不错的部分:

"Targeted Patching - Method lacks TargetedPatchingOptOutAttribute" -this relates to a new feature in CLR 4 where NGEN images are moreversion resilient. In a nutshell, we hope to be able to apply a patchor fix to mscorlib.dll and not have to recompile all the other nativeimages on the machine that depend upon it. This should only apply tomethods in the .NET framework class libraries because they are theonly assemblies that can opt into this feature.


这意味着:因为 .NET Framework 程序集现在支持 targeted patching在 .NET 4.0 中,这些程序集的方法通常不能内联。但是标有 TargetedPatchingOptOutAttribute 的方法是性能关键,因此选择退出目标补丁(这意味着如果它们被更改,所有使用该方法的 native 镜像都需要重新编译)。由于我们自己的程序集不使用有针对性的补丁,因此没有理由阻止跨原生图像的方法内联。
为了测试这一点,我创建了一个小示例,显示了在不同程序集中引发的异常的调用堆栈。只有我的 main 方法和引发异常的方法在调用堆栈中。调用和被调用程序集中的其他一些小方法(基本上只是调用下一个方法)不在调用堆栈中。为程序集创建 native 镜像后,此行为没有改变(是的,我检查了是否使用了 native 镜像)。

关于.net - 跨程序集的 native 镜像内联方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com