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 :slight_smile: 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;

int j;
for (int i = 0; i != 100000; i++)
_ j = myArray*;*_

*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*;*_

*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*;*_

DateTime dt2 = DateTime.Now;