性能:列表.计数vs检查存储变量

本文关键字:检查 存储 变量 vs 计数 列表 性能 | 更新日期: 2023-09-27 18:18:49

我想知道这是否有什么不同:

 for (int i = 0; i < values.Count; i++)
        {
            //
        }

int num = values.Count;
for(int=0; i<num; i++)
{
}

我认为第二种方法更好,因为您不需要计算每次迭代中的所有项。但我可能错了。有人能给我点灯吗?

性能:列表.计数vs检查存储变量

列表已经在内部存储了它的Count。您所做的比较与代码风格有关,而与性能无关。因为编译器会优化'Count'的检索

你可以在这里查看。net源代码http://referencesource.microsoft.com/mscorlib/系统/收藏/一般/list.cs # aa7e01fcb80a917e

  public int Count {
        get {
            Contract.Ensures(Contract.Result<int>() >= 0);
            return _size; 
        }
    }

list上的. count属性似乎做了一个快速的内部检查,然后返回_size。所以它应该非常接近你自己存储值的性能

这完全取决于values是什么。Count可以完全不同地实现,这取决于该对象的类型。

如果你谈论的是一个通用的List<T> -然后计数被实现为一个内部属性,不重新评估-因此是更好的选择。

我试了两种方法,并使用"int num=values.Count;"以很大的优势获胜我的测试使用了Performance Analyzer,并连续运行了两种方法。然后我切换哪一个先运行,并再次将其存储为整数。我猜是访问列表。Count比较慢,编译器不会优化它只运行一次。