- Home /
Generics and Arrays
All I'm happy to get any discussion on this - using Arrays and Generics performance I know the initial reaction is arrays have better performance but because Generics is such a nice thing to use I wanted to look further into this.
The best source I could get was an MSDN blog results below.
It seems that Generic lists are always faster when dealing with boxing and unboxing (passing / casting elements like objects out of them and then using them) but that arrays are about 25% - 50% faster when dealing with simple types and operations. I personally don't think that the code speed improvement for very simple types of operations on simple types is worth the effort of using arrays if you want to use Generics but I'd like to know what everyone thinks?
http://blogs.msdn.com/b/ricom/archive/2006/03/12/549987.aspx
Test Case - Milliseconds
Test1: Array via Boxing / unboxing - 54
Test2: List<> via Boxing / unboxing - 8
Test4: Array via foreach - 9
Test5: List<> via foreach - 11
Test6: Array via special - 6
Test7: List<> via special - 8
Cheers
To my amazement I just ran the following two sets of code and both on my machine ran under Unity in exactly the same time to the millisecond. I'd be interested for others to try it yourself and report your results :) What does everyone think this means for performance and use of Generics vs Arrays?
/Arrays Version - 40 milliseconds ***/
DateTime dt1 = DateTime.Now;
int[] myArray = new int[100000]; for (int i = 0; i != 100000; i++) myArray[i] = i;
int j; for (int i = 0; i != 100000; i++) j = myArray[i];
DateTime dt2 = DateTime.Now;
//break here time creation, writes and reads is dt2 - dt1
j = 1;
/ Lists Version 40 milliseconds */
DateTime dt1 = DateTime.Now;
List myList = new List();
for (int i = 0; i != 100000; i++) myList.Add(i);
int j; for (int i = 0; i != 100000; i++) j = myList[i];
DateTime dt2 = DateTime.Now;
//break here time for list creation, writes and reads is dt2 - dt1
j = 1;
/ Lists Version 2 with capacity initialisation - 40 milliseconds */
DateTime dt1 = DateTime.Now;
List myList = new List(100000);
for (int i = 0; i != 100000; i++) myList.Add(i);
int j; for (int i = 0; i != 100000; i++) j = myList[i];
DateTime dt2 = DateTime.Now;
//break here time for list creation, writes and reads is dt2 - dt1
j = 1;
Answer by markl · Dec 20, 2011 at 07:15 AM
To my amazement I just ran the following two sets of code and both on my machine ran under Unity in exactly the same time to the millisecond. I'd be interested for others to try it yourself and report your results :) What does everyone think this means for performance and use of Generics vs Arrays?
/Arrays Version - 40 milliseconds ***/ DateTime dt1 = DateTime.Now;
int[] myArray = new int[100000]; for (int i = 0; i != 100000; i++) myArray[i] = i;
int j; for (int i = 0; i != 100000; i++) j = myArray[i];
DateTime dt2 = DateTime.Now;
//break here time creation, writes and reads is dt2 - dt1 j = 1; / Lists Version 1 - 40 milliseconds */ DateTime dt1 = DateTime.Now;
List myList = new List();
for (int i = 0; i != 100000; i++) myList.Add(i);
int j; for (int i = 0; i != 100000; i++) j = myList[i];
DateTime dt2 = DateTime.Now;
//break here time for list creation, writes and reads is dt2 - dt1
j = 1;
/ Lists Version 2 with capacity initialisation - 40 milliseconds */ DateTime dt1 = DateTime.Now;
List myList = new List(100000);
for (int i = 0; i != 100000; i++) myList.Add(i);
int j; for (int i = 0; i != 100000; i++) j = myList[i];
DateTime dt2 = DateTime.Now;
Your answer
Follow this Question
Related Questions
How to get smallest element and key from int list 1 Answer
How do I Resize an Array in JS? 1 Answer
Merging together all GameObjects of an Array? 1 Answer
Add to .net Arrays 1 Answer