3

在代码中定义了 ValidateRequestmethod

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

从我想检查 _doc 是否为空的任何地方调用此方法。这个方法已经在一个cs文件中使用了5次。

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

有什么想法吗?

=== 编辑 ====

我正在使用 .NET 3.5 版

4

4 回答 4

7

不要打扰它。编译器可能会内联该方法,因为相应的 IL 很短。

如果该方法有助于代码的可维护性,那么随着它传达意图继续下去

于 2012-04-24T13:54:24.560 回答
7

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

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

于 2012-04-24T13:58:29.667 回答
5

一如既往:当您有疑问时,进行基准测试!
当您进行基准测试时,请在发布模式下进行,否则您不会使用编译器优化进行基准测试。

之后,如果它确实影响性能,您可以将其内联到 NGen。
这篇SO帖子谈到了它。

于 2012-04-24T13:54:21.487 回答
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;
    }
于 2012-04-24T14:05:40.013 回答