CLR编译器/JIT是否执行任何逃逸分析?例如,在Java中,似乎在循环中未逃逸的对象(例如循环变量)会在堆栈上而不是堆上分配(请参见Java中的逃逸分析)。
为了澄清,在下面的示例中,编译器是否会优化掉foo
的堆分配,因为它从未逃逸出循环。
class Foo
{
int number;
Foo(int number) { this.number = number; }
public override string ToString() { return number.ToString(); }
}
for (int i = 0; i < 10000000; i++)
{
Foo foo = new Foo(i);
Console.WriteLine(foo.ToString());
}
ToString()
是不正确的;应该是public override ToString()
- 强调override
。 - Marc GravellToString()
上是正确的,我会修复代码的…… - SimonC