KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
In .NET, using "foreach" to iterate an instance of IEnumerable will create a copy? So should I prefer to use "for" instead of "foreach"? I wrote some code to testify this: struct ValueTypeWithOneField { private Int64 field1; } struct ValueTypeWithFiveField { private Int64 field1; private Int64 field2; private Int64 field3; private Int64 field4; private Int64 field5; } public class Program { static void Main(string[] args) { Console.WriteLine("one field"); Test<ValueTypeWithOneField>(); Console.WriteLine("-----------"); Console.WriteLine("Five field"); Test<ValueTypeWithFiveField>(); Console.ReadLine(); } static void Test<T>() { var test = new List<T>(); for (int i = 0; i < 5000000; i++) { test.Add(default(T)); } Stopwatch sw = new Stopwatch(); for (int i = 0; i < 5; i++) { sw.Start(); foreach (var item in test) { } sw.Stop(); Console.WriteLine("foreach " + sw.ElapsedMilliseconds); sw.Restart(); for (int j = 0; j < test.Count; j++) { T temp = test[j]; } sw.Stop(); Console.WriteLine("for " + sw.ElapsedMilliseconds); sw.Reset(); } }} And this is the result that I got after I ran the code: one field foreach 68 for 72 foreach 68 for 72 foreach 67 for 72 foreach 64 for 73 foreach 68 for 72 ----------- Five field foreach 272 for 193 foreach 273 for 191 foreach 272 for 190 foreach 271 for 190 foreach 275 for 188 As we can see in the result, "foreach" always takes more time than "for". So should I prefer to use "for
Tags (comma-separated)
Save Edits
Cancel