只有一行的方法会达到性能?

时间:2012-04-24 13:52:08

标签: c# .net performance optimization

在代码中定义了ValidateRequest方法

    private bool ValidateRequest()
    {
        return _doc != null;
    }

从我想要检查_doc是否为null的所有地方调用此方法。此方法已在cs文件中使用了5次。

性能观点是否建议仅使用一条线来定义方法?我想在调用这个方法之前,所有来自被调用的东西都会被推到堆栈上,然后它将被从堆栈中拉出来。

有什么想法吗?

===编辑====

我使用的是.NET版本3.5

4 个答案:

答案 0 :(得分:7)

将单行移入方法极不可能对您的应用程序产生重大影响。实际上很可能这不会产生任何影响,因为JIT可以选择内联这样的函数调用。我肯定会选择将检查保存在一个单独的方法中,除非探查器明确表明它是一个问题。

专注于编写清晰且抽象的代码。让分析器指导您解决真正的性能问题。

答案 1 :(得分:6)

不要理会它。编译器可能会内联该方法,因为相应的IL非常短。

如果该方法有助于代码可维护性,因为它传达意图继续使用它

答案 2 :(得分:5)

一如既往:当你有疑虑时,基准! 当您进行基准测试时,请在发布模式下执行此操作,否则您将无法使用编译器优化进行基准测试。

之后,如果它确实影响了性能,您可以使用NGen内联它。
This SO post谈论它。

答案 3 :(得分:1)

好的,所以这只是来自LinqPad,而不是我猜一个明确的答案,但下面的代码产生了一个微小的差异:(00:00:00.7360736 vs 00:00:00.0740074)

void Main()
{
    var starttime = DateTime.Now;
    for (var i = 0; i < 1000000000; i++)
    {
        if (ValidateRequest()) continue;
    }
    var endtime = DateTime.Now;
    Console.WriteLine(endtime.Subtract(starttime));

    starttime = DateTime.Now;
    for (var i = 0; i < 100000000; i++)
    {
        if (_doc != null) continue;
    }
    endtime = DateTime.Now;
    Console.WriteLine(endtime.Subtract(starttime));
}

private object _doc = null;

private bool ValidateRequest()
    {
        return _doc != null;
    }