C# 如何知道我的代码是否是内联的?

C# 如何知道我的代码是否是内联的?,c#,C#,我想知道我的代码是否可以内联。 我找到了一种方法,即: Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name) 但我不知道它应该如何告诉我。 如果我在这上面使用它: [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static ImageCodecInfo GetEncoderInfo(ImageFormat format) {

我想知道我的代码是否可以内联。 我找到了一种方法,即:

Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name)

但我不知道它应该如何告诉我。 如果我在这上面使用它:

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static ImageCodecInfo GetEncoderInfo(ImageFormat format)
{
    Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);
    return ImageCodecInfo.GetImageEncoders().ToList().Find(delegate(ImageCodecInfo codec)
    {
        return codec.FormatID == format.Guid;
    });
}
如果控制台是内联的,那么它应该写什么? 根据我的理解,它应该写呼叫者的名字,例如:

Private void Caller()
 {

ImageCodecInfo GetEncoderInfo(bmpFormat)
 }
然后控制台将写入调用方

这是正确的吗?
如果是这样的话,那么我尝试过的任何东西都不会内联。

GetCurrentMethod阻止内联(源代码)


请记住,内联是在JIT期间完成的,而不是在编译期间。

您必须检查程序集中的实际IL,以确定是否内联了一个方法。这并不能告诉我太多,您可以更详细一些吗?请参见这里:@RobertHarvey:内联不是总是由JIT编译器执行的吗,不是C#编译器?您是否使用分析器进行了一些测量,并专门将方法调用确定为性能问题?哦,我猜他们“修复”了这个问题。是的,我使用释放模式