list.Count>之间的区别0和list.Count!= 0

时间:2015-10-10 05:15:41

标签: c# c++ performance compare

我有一系列的东西。 list.Count > 0list.Count != 0之间有什么区别吗?或者这些代码中的任何性能差异?

if (list.Count > 0)
    // do some stuff

if (list.Count != 0)
    // do some stuff
  

注意:list.Count不能小于ziro ..

5 个答案:

答案 0 :(得分:3)

正如大家所解释的那样,功能上list.Count != 0list.Count > 0之间没有区别,因为list.Count不能< 0

我做了一个快速测试,它显示!= 0> 0 几乎同样快(并且超快)。 Linq的list.Any()并不快!

这是测试代码(比较100000倍以放大差异)

static List<object> GetBigObjectList()
{
    var list = new List<object>();
    for (int i = 0; i < 10000; i++)
    {
        list.Add(new object());
    }
    return list;
}

static void Main(string[] args)
{
    var myList = GetBigObjectList();
    var s1 = new Stopwatch();
    var s2 = new Stopwatch();
    var s3 = new Stopwatch();

    s1.Start();
    for (int i = 0; i < 100000; i++)
    {
        var isNotEqual = myList.Count != 0;
    }
    s1.Stop();

    s2.Start();
    for (int i = 0; i < 100000; i++)
    {
        var isGreaterThan = myList.Count > 0;
    }
    s2.Stop();

    s3.Start();
    for (int i = 0; i < 100000; i++)
    {
        var isAny = myList.Any();
    }
    s3.Stop();

    Console.WriteLine("Time taken by !=    : " + s1.ElapsedMilliseconds);
    Console.WriteLine("Time taken by >     : " + s2.ElapsedMilliseconds);
    Console.WriteLine("Time taken by Any() : " + s3.ElapsedMilliseconds);            
    Console.ReadLine();
}

它显示:

  

时间!=:0
  时间>&gt; :0
  Any()的时间:10

答案 1 :(得分:2)

  

list.Count > 0list.Count != 0之间有什么区别吗?

是。第一个评估list.Count是否大于0。第二个评估它是否不等于0。 &#34;大于&#34;并且&#34;不等于&#34;是不同的事情。

答案 2 :(得分:1)

我想在CPU寄存器级别,用于比较两个数字的汇编命令将逐位检查这些数字,并将激活一些条件标志以跳转到指定的行。例如:

cmp BL, BH     ; BL and BH are cpu registers
je EQUAL_Label       ; BL = BH
jg GREATER_Label     ; BL > BH
jmp LESS_Label       ; BL < BH

如您所见,jejgjmp命令几乎是可能适用于先前cmp(比较)命令的最原子命令。 总之,我们可以说这些比较命令之间没有显着的性能差异 祝你好运

答案 3 :(得分:0)

  

在这种特殊情况下,两者之间没有典型的区别   这两个。但!=>0完全不同。 >0仅执行   当count(条件表达式)大于0时其中!=执行时count(条件表达式)   大于0以及小于0

if (list.Count > 0)
{
  // Execute only when the count greater than 0
}
if (list.Count != 0)
{
  // Execute only when the count not equal to 0
}

答案 4 :(得分:0)

我想如果ICollection.Count是uint的类型,你就不会有这样的问题。在Why does .NET use int instead of uint in certain classes?查看ICollection.Count为int的原因。

从可读性的角度来看,list.Count != 0会导致考虑Count是否为负数。所以我更喜欢list.Count > 0 personaly。