方法调用开销

时间:2010-09-02 12:11:38

标签: .net performance code-readability

在.NET中调用一个立即返回的方法的开销是多少(因为不满足内部第一个代码的条件)?

我认为无论你的申请是多么实时,这个开销都可以忽略不计,在任何情况下,分析都应该显示事实,可读性更重要,但有些同事不赞同我说你应该总是避免这些电话......

还有其他意见吗?

2 个答案:

答案 0 :(得分:2)

我敢说有一些边缘情况可能显着 - 但它们将非常罕见。我同意你的观点:先写一下可读性。

请注意,如果方法非常短,JIT编译器可以内联它 - 但如果它是一个很大的方法,你只是发生快速退出,它可能惯于。在极端情况下,您可能希望将方法拆分为两个:一个简短方法(可以内联)以测试方法的其余部分是否有效,以及一个实际完成工作的方法。然后,您可以先执行测试,然后调用第二种方法。坦率地说,我不喜欢它,并且只有 建议在你发现这确实是一个问题之后才会这样做...但至少你有一个建议让你的同事在可能的情况下它确实被证明是一个问题:)

可能想要考虑避免方法调用的一个原因是,如果评估参数需要很长时间。例如,考虑记录:

Log.Info("I did something: {0}", action.GenerateDescription());

现在,如果GenerateDescription需要很长时间,那么如果日志不会发生,你不想执行它......所以你可以这样写:

if (Log.IsEnabled(LogLevel.Info))
{
    Log.Info("I did something: {0}", action.GenerateDescription());
}

另一种选择是使用委托来推迟评估 - 尽管这可能有其自己的(小)成本:

Log.Info("I did something: {0}", () => action.GenerateDescription());

或使用方法gruop转换:

Log.Info("I did something: {0}", action.GenerateDescription);

这可能不是你的同事担心的问题,但是值得思考:)

答案 1 :(得分:0)

这取决于你的方法的样子,但编译器也可以“内联”这样的方法。因此,可能根本就没有开销。