Jat*_*ing 6 c# performance jit
例如:
代码1:
void Main()
{
Console.WriteLine("Some texts");
}
Run Code Online (Sandbox Code Playgroud)
代码2:
void Main()
{
Foo();
}
void Foo()
{
Console.WriteLine("Some texts");
}
Run Code Online (Sandbox Code Playgroud)
代码2运行速度比代码1慢吗?我虽然在构建版本时,JIT将内联代码2,然后代码2将以代码1的速度运行.但是当我使用LinqPad测试它时,我得到了IL结果:
代码1:
IL_0000: ldstr "Some texts"
IL_0005: call System.Console.WriteLine
Run Code Online (Sandbox Code Playgroud)
代码2:
IL_0000: ldarg.0
IL_0001: call UserQuery.Foo
Foo:
IL_0000: ldstr "Some texts"
IL_0005: call System.Console.WriteLine
IL_000A: ret
Run Code Online (Sandbox Code Playgroud)
我们可以看到代码2中的IL结果有一些额外的步骤来调用Foo(),这是否证明代码2比代码1运行得慢?
jas*_*son 10
首先,您正在查看IL,而不是JITted汇编代码.你所展示的并不能证明什么.您需要查看JITted输出以查看JITter是否内联了代码.请注意,JITter从平台到平台(例如x86与x64)以及Framework的版本与Framework版本不同.
其次,当然,由于书面版本2的运行速度比版本1慢.当我说"as written"时,我的意思是假设JITter没有在第二版中内联调用.额外的调用添加了一些机器指令,当然需要几个额外的周期来执行(再次,不要忘记我说"写的!").然而,性能上的差异非常极大,不太可能有意义.您必须在最紧密的循环中进行数万亿次和数万亿次迭代才能看到有意义的性能差异.