I had a long debate last night about the effeciences of for loops, for each loops, and the instantiation of variables. Take a look at the following loops:
//Loop #1MyObject obj = null;for (int i = 0; i < myObjectCollection.Count; i++){ obj = myObjectCollection.Count[i]; //Do something with obj...}
OR
//Loop #2for (int i = 0; i < myObjectCollection.Count; i++){ MyObject obj = myObjectCollection.Count[i]; //Do something with obj...}
Essentially both of these loops do the same thing. However I have a few questions:
1) In loop #2 it appears that "obj" gets instantiated each time through the loop therefore allocating a new location in the stack. Is this correct or does the compiler optimize this to allow the variable to remain in the same location each time just passing it a new reference to the object in the collection?
2) In either loop is it necessary/more effecient to set "obj = null" at any point to speed up garbage collection?
3) In general which of these is more effecient and why?
Thanks,
Micah Martin