我在审查第三方外包公司提供给我们的一些代码时遇到了这个小 gem :
try
{
int i = strOriginalData.IndexOf("\r\n");
////System.Diagnostics..EventLog.WriteEntry("i", i.ToString());
}
catch (System.Exception ex)
{
////System.Diagnostics..EventLog.WriteEntry("ex", ex.Message);
}
我的问题是编译器会完全优化它吗?当我在 Reflector 中查看编译后的程序集时,它显示如下:
try
{
i = this.strOriginalData.IndexOf("\r\n");
}
catch (Exception exception1)
{
ex = exception1;
}
i 的声明已移至方法的顶部,Exception 类型的附加声明也位于方法的顶部。
因此,由于这段代码实际上没有做任何事情,我想知道编译器是否足够聪明,可以看到这段代码什么也没做,并可以优化它。
最佳答案
因此,正如您通过 Reflector 发现的那样,C# 编译器 不会优化它。 JIT 编译器 是否会是另一个问题。但是,我想答案几乎肯定不是。
为什么?因为 JIT 编译器不知道 IndexOf
是一个无聊的方法。换句话说,就 JIT 编译器所知,string.IndexOf
可以定义为
public int IndexOf()
{
CallAWebService();
}
显然,在那种情况下优化掉那条线是不好的。
关于c#:这段代码会得到优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337827/