性能:列表.计数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++)
{
}
我认为第二种方法更好,因为您不需要计算每次迭代中的所有项。但我可能错了。有人能给我点灯吗?
列表已经在内部存储了它的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比较慢,编译器不会优化它只运行一次。