在代码中定义了ValidateRequest方法
private bool ValidateRequest()
{
return _doc != null;
}
从我想要检查_doc是否为null的所有地方调用此方法。此方法已在cs文件中使用了5次。
性能观点是否建议仅使用一条线来定义方法?我想在调用这个方法之前,所有来自被调用的东西都会被推到堆栈上,然后它将被从堆栈中拉出来。
有什么想法吗?
===编辑====
我使用的是.NET版本3.5
答案 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;
}