AggressiveInlined 是否会影响任何版本的 .NET 中的 Finalize?

问题描述 投票:0回答:1

在 C# 中,您可以将

[MethodImpl(MethodImplOptions.AggressiveInlining)]
属性应用于任何方法,以确保 JIT 在大多数地方内联调用它(而不是依赖启发式识别短方法)。 何时应该应用它是有争议的,但现代 .NET 通常本身就做得足够好,因此该属性不是必需的。 (遗憾的是我一直在使用 .NET Framework。)

我很好奇它是否对终结器(析构函数,

~TypeName() {}
)有任何影响,因为它们可以采用适用于
AttributeTargets.Method
的任何属性,包括
[MethodImpl]
。从文档中,我了解到 GC 会调用类继承链上的每个
Finalize
实现 — 这些调用是否符合内联条件?我并不认为如果是这样的话,它会产生明显的变化。

c# .net finalizer inlining
1个回答
0
投票

[MethodImpl(MethodImplOptions.AggressiveInlining)]
用于 JIT 编译器,对
Finalizers
的调用不是从 JIT 编译的代码(运行时的非托管部分)发起的。所以,从逻辑上讲,它不应该有任何影响。

但即使是这样,我也会假设运行它们的代码类似于:

foreach(var finalizer in finalizers){
    finalizer(); // inline here?
}

你会如何内联它?

© www.soinside.com 2019 - 2024. All rights reserved.