C# 只有一行的方法会影响性能吗?

C# 只有一行的方法会影响性能吗?,c#,.net,performance,optimization,C#,.net,Performance,Optimization,在代码中定义了ValidateRequestmethod private bool ValidateRequest() { return _doc != null; } 这个方法在我想检查_doc是否为null的任何地方都被调用。此方法已在cs文件中使用了5次 从性能的角度来看,仅用一行定义一个方法是否可取?我认为在调用这个方法之前,调用的所有内容都将被推送到堆栈上,然后从堆栈中取出 有什么想法吗 ==编辑==== 我一如既往地使用.NET 3.5版:当

在代码中定义了ValidateRequestmethod

    private bool ValidateRequest()
    {
        return _doc != null;
    }
这个方法在我想检查_doc是否为null的任何地方都被调用。此方法已在cs文件中使用了5次

从性能的角度来看,仅用一行定义一个方法是否可取?我认为在调用这个方法之前,调用的所有内容都将被推送到堆栈上,然后从堆栈中取出

有什么想法吗

==编辑====


我一如既往地使用.NET 3.5版

:当您有疑问时,请进行基准测试
当您进行基准测试时,请在release模式下进行,否则您就不会使用编译器优化进行基准测试

之后,如果它确实影响性能,您可以将其与NGen内联

谈论它。

别费心了。编译器可能会内联该方法,因为相应的IL非常短


如果该方法有助于代码的可维护性,那么当它传达意图时,将一行移到一个方法中不太可能对应用程序产生重大影响。实际上,这很可能没有影响,因为JIT可以选择内联这样的函数调用。我肯定会选择将检查保留在一个单独的方法中,除非探查器明确指出这是一个问题


专注于编写清晰、抽象的代码。让探查器引导您了解真正的性能问题

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

void Main()
{
var starttime=DateTime.Now;
对于(变量i=0;i<100000000;i++)
{
如果(ValidateRequest())继续;
}
var endtime=DateTime.Now;
Console.WriteLine(endtime.Subtract(starttime));
starttime=DateTime.Now;
对于(变量i=0;i<100000000;i++)
{
如果(_doc!=null)继续;
}
endtime=DateTime.Now;
Console.WriteLine(endtime.Subtract(starttime));
}
私有对象_doc=null;
私有布尔验证请求()
{
返回_doc!=null;
}

您是否分析了应用程序并验证了这是一个真正的瓶颈?您使用的是哪个版本的.NET?@Tudor:.NET 3.5。也被修改了。大概每秒执行多少次?如果是10^9,请关心它。如果是10^6,就不要。这个微小的差异是10的一个因素!没错,但看起来我在第二个for循环中漏掉了一个零。使之成为10分之一。啊!你说得对。我仔细看了看,再次确认了它不是从哪里来的,但仍然错过了它。
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;
    }