相关疑难解决方法(0)

我可以给编译器/ JIT提供哪些优化提示?

我已经介绍过了,现在我正在寻找可以从我的热点中挤出一切可能的性能.

我知道[MethodImplOptions.AggressiveInlining]ProfileOptimization类.还有其他人吗?


[编辑] 我刚刚发现了[TargetedPatchingOptOut].没关系,显然不需要一个.

.net c# vb.net optimization

32
推荐指数
2
解决办法
3524
查看次数

为什么C#编译器为GetType()方法调用发出callvirt指令?

我很想知道为什么会这样.请阅读下面的代码示例以及每个部分下面的注释中发出的相应IL:

using System;

class Program
{
    static void Main()
    {
        Object o = new Object();
        o.GetType();

        // L_0001: newobj instance void [mscorlib]System.Object::.ctor()
        // L_0006: stloc.0 
        // L_0007: ldloc.0 
        // L_0008: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()

        new Object().GetType();

        // L_000e: newobj instance void [mscorlib]System.Object::.ctor()
        // L_0013: call instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器callvirt为第一部分发出a 而call第二部分发出a ?是否有任何理由编译器会发出callvirt非虚方法的指令?如果在某些情况下编译器将callvirt为非虚拟方法发出一个,这会产生类型安全问题吗?

c# compiler-construction il type-safety

28
推荐指数
2
解决办法
2868
查看次数