cre*_*mor 18 .net ngen .net-assembly
正如在另一个问题中所解释的,如果方法设置了TargetedPatchingOptOutAttribute,则通常只允许Ngen跨组件内联方法.
但是,通过使用DependencyAttribute,对于硬绑定程序集也是如此吗?LoadHint.Always
编辑:也许我的初始问题的答案是否定的,否则TargetedPatchingOptOutAttribute在mscorlib中使用它是没有意义的,因为这个程序集总是硬绑定(它设置了DefaultDependencyAttribute).所以我想重新解释一下我的问题:是否可以在TargetedPatchingOptOutAttribute组件的原生图像中内联方法?
cre*_*mor 28
似乎其他问题导致我完全错误的假设.在我们的方法自己的组件都跨本地图像boundries内联,即使他们既没有硬约束,也有TargetedPatchingOptOutAttribute集.此属性仅影响.NET Framework程序集.
微软博客文章有一个非常好的部分TargetedPatchingOptOutAttribute:
"Targeted Patching - Method缺少TargetedPatchingOptOutAttribute" - 这与CLR 4中的新功能相关,其中NGEN图像具有更强的版本弹性.简而言之,我们希望能够对mscorlib.dll应用补丁或修复,而不必重新编译依赖它的机器上的所有其他本机映像.这应该只适用于.NET框架类库中的方法,因为它们是唯一可以选择加入此功能的程序集.
这意味着:由于.NET Framework程序集现在支持.NET 4.0中的目标修补,因此通常无法内联这些程序集中的方法.但是标记TargetedPatchingOptOutAttribute为性能的方法是关键性的,因此选择退出目标修补(这意味着如果它们被更改,则需要重新编译使用该方法的所有本机映像).由于我们自己的assemblis不使用有针对性的修补,因此没有理由阻止跨本机图像的方法内联.
为了测试这个,我创建了一个小样本,显示了在不同程序集中抛出的异常的调用堆栈.只有我的main方法和抛出异常的方法才在调用堆栈中.调用和调用程序集中放置的其他一些小方法(基本上只是调用下一个方法)不在调用堆栈中.在为程序集创建本机映像后,此行为未发生更改(是的,我检查过使用了本机映像).
TLDR版本:不关心TargetedPatchingOptOutAttribute它,它应该只在.NET Framework程序集中使用.自行开发组件的内联方法与Ngen和JIT的工作原理相同.
| 归档时间: |
|
| 查看次数: |
3318 次 |
| 最近记录: |