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

C# 分配方法的结果值是否比再次调用该方法更快?,c#,C#,只是出于好奇,在性能方面,哪一个更快更好 一些非常基本的代码: List<string> list = new List<string>(); list.Add("FOO"); list.Add("BAR"); List List=新列表(); 列表。添加(“FOO”); 列表。添加(“酒吧”); (一) //在if语句中调用count两次 if(list.Count()>0 | | list.Count()0 | | listCount

只是出于好奇,在性能方面,哪一个更快更好

一些非常基本的代码:

List<string> list = new List<string>();
list.Add("FOO");
list.Add("BAR");
List List=新列表();
列表。添加(“FOO”);
列表。添加(“酒吧”);
(一)

//在if语句中调用count两次
if(list.Count()>0 | | list.Count()<3)
{
Console.WriteLine(“有两项”);
}
(二)

//将计数返回结果分配给变量
var listCount=list.Count();
如果(listCount>0 | | listCount<3)
{
Console.WriteLine(“有两项”);
}
答案是“视情况而定”。我相信在某些情况下,调用一个方法两次会更快,但我想说的是,在绝大多数情况下,将返回值赋给一个变量并简单地引用该变量会更快

如果您知道使用方法(或属性,因为它们只是方法的一种类型)是昂贵的,那么您肯定应该存储结果

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


但是在您访问
Count
Count()
的示例中,后者对于
列表类型来说是快速的(但对于其他类型来说可能是昂贵的),相比于将其存储到变量而不是两次调用它,您所获得的性能改进可以忽略不计,所以我会做任何让你高兴的事。

这些是我在10万次迭代后得到的结果:

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

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


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

您认为如何?您是否尝试过将代码置于100000次以上(循环)并查看哪一次运行得更快?这与@Tarec有关系吗?在这种情况下,语义是相同的,但可能还有其他原因决定您是否应该调用该方法,或者赋值。我不是问哪个
count
方法更快@Tarec@Tarec请让我明白:为什么你认为一个属性或方法对这个问题有任何影响?如果您编译它,在这种情况下,属性也将只是一个方法调用。
后者对于列表类型来说是快速的
——因为扩展方法实际上尝试转换为
ICollection
。如果成功,则只返回collections
Count
属性。因此,开销在方法调用和尝试的强制转换中(只是一点额外的信息)。此运行是基于
Count
vs
Count()
还是基于方法调用vs变量分配是的,双重调用vs.变量分配。
//Calling count twice in the if statement
if(list.Count() > 0 || list.Count() < 3)
{
    Console.WriteLine("There are two items");
}
//Assigning count return result to a variable
var listCount = list.Count();
if(listCount > 0 || listCount < 3)
{
   Console.WriteLine("There are two items");
}