which is faster: for or foreach
Possible Duplicate:
For vs Foreach loop in C#
号
假设我有一个收藏
List < Foo > list = new List< Foo >();
号
现在,哪个愚弄的循环会运行得更快,为什么:
for(int i=0; i< list.Count; i++)
号
或
foreach(Foo foo in list)
号
这取决于:
对于
对于
对于上面的示例,不应该有任何区别,因为您使用的是标准列表类。
foreach对我来说打字更快:)而且更容易阅读。
谁在乎?您有性能问题吗?如果是这样,您是否测量并确定这是应用程序中最慢的部分?
尝试此方法,for和foreach几乎同时产生结果,但是.foreach()方法更快
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | class Program { static void Main(string[] args) { //Add values List<objClass> lst1 = new List<objClass>(); for (int i = 0; i < 9000000; i++) { lst1.Add(new objClass("1","")); } //For loop DateTime startTime = DateTime.Now; for (int i = 0; i < 9000000; i++) { lst1[i]._s1 = lst1[i]._s2; } Console.WriteLine((DateTime.Now - startTime).ToString()); //ForEach Action startTime = DateTime.Now; lst1.ForEach(s => { s._s1 = s._s2; }); Console.WriteLine((DateTime.Now - startTime).ToString()); //foreach normal loop startTime = DateTime.Now; foreach (objClass s in lst1) { s._s1 = s._s2; } Console.WriteLine((DateTime.Now - startTime).ToString()); } public class objClass { public string _s1 { get; set; } public string _s2 { get; set; } public objClass(string _s1, string _s2) { this._s1 = _s1; this._s2 = _s2; } } } |
好。。你可以用
然而,关键是,为什么你需要考虑它。在本例中,您应该首先考虑哪个更易于阅读,并使用那个,而不是担心性能。
如果发现性能问题,黄金法则总是编写可读的代码并进行优化。
如果需要使用当前项的索引,请使用
我没有可以支持这一点的源代码,但我相信它们几乎完全相同,这是因为编译器执行优化(如循环展开)的方式。如果存在差异,则可能是单CPU周期或数十个CPU周期的顺序,对于99.9999%的应用程序来说,这几乎是零。
一般来说,foreach被认为是"句法上的糖",也就是说,拥有它是很好的,但是除了改变你对特定代码的表达方式之外,它实际上没有做太多的工作。