是否比再次调用该方法更快地分配方法的结果值?

时间:2014-05-22 12:02:07

标签: c#

出于好奇,哪些在性能方面更快更好?

一些非常基本的代码:

List<string> list = new List<string>();
list.Add("FOO");
list.Add("BAR");

1)

//Calling count twice in the if statement
if(list.Count() > 0 || list.Count() < 3)
{
    Console.WriteLine("There are two items");
}

2)

//Assigning count return result to a variable
var listCount = list.Count();
if(listCount > 0 || listCount < 3)
{
   Console.WriteLine("There are two items");
}

2 个答案:

答案 0 :(得分:2)

答案是“它取决于”。我确信在某些情况下调用方法两次会更快,但我会说绝大部分时间,将返回值赋给变量更快,并简单地引用该变量。

如果您知道使用方法(或属性,因为这些只是一种方法)很昂贵,那么您一定要存储结果。

我的经验法则是,如果我多次使用返回值,我会将其存储在变量中。我不会这样做的唯一一次是你知道返回值可能会在方法调用之间发生变化。

但是在您访问CountCount()的示例中,后者对List<>类型来说很快(但对其他类型来说可能很昂贵),您可以通过存储获得性能提升它变成一个变量vs两次调用可以忽略不计,所以我会做任何让你开心的事。

答案 1 :(得分:1)

这些是我在100 000 000次迭代后获得的结果:

00:00:01.9444910 s用于双重调用Count()方法

00:00:01.9531469用于调用Count()一次并将其存储在变量中

<00> 00:00:00.3298595 s用于检查Count属性。