【发布时间】:2011-12-08 03:13:27
【问题描述】:
例如:
代码 1:
void Main()
{
Console.WriteLine("Some texts");
}
代码 2:
void Main()
{
Foo();
}
void Foo()
{
Console.WriteLine("Some texts");
}
代码 2 的运行速度是否比代码 1 慢?虽然当我们构建版本时,JIT 将内联代码 2,因此代码 2 的运行速度与代码 1 一样快。但是当我使用 LinqPad 测试它们时,我得到了 IL 结果:
代码 1:
IL_0000: ldstr "Some texts"
IL_0005: call System.Console.WriteLine
代码 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
我们可以看到代码 2 中的 IL 结果有一些额外的步骤来调用 Foo(),这是否证明代码 2 运行速度比代码 1 慢?
【问题讨论】:
-
您是在调试模式还是发布模式下运行?
-
@Tudor :我在LinqPad 中对它们进行了测试,但我不知道它以哪种模式运行。有没有办法让 Visual Studio 像这样显示 IL 结果?
-
你有两匹马。你想知道哪个更快。您是否 (1) 在互联网上随机询问陌生人哪一个更快,或者 (2) 与马匹比赛,看看哪一个获胜?
-
你有一个程序,里面有一个
Console.Writeline,你想知道函数调用是否会减慢它的速度?你需要一种透视感。您说的可能需要 186 光英里,而函数调用可能需要 1 光英尺。
标签: c# performance jit