Tag Archives: Generics

Generic List vs Object List

I was reading through a Microsoft certfication training kit book, when I came upon a discussion about the performance of data structures which use generics, against those that use objects (and boxing). Intrigued, I knocked up a couple of Linked List types for a test.

The implementations of the Linked Lists were identical, bar the fact that one used Generics, whilst the other used Objects. I then used 2 successive, long-running for loops, each performing inserts on the respective Linked Lists, to test the performance of each. The System.Diagnostics.Stopwatch() class came in very handy:


static void Main(string[] args)
{
	ObjectNS.LinkedList objectsList = new ObjectNS.LinkedList();
	GenericNS.LinkedList<int> genericLinkedList = new GenericNS.LinkedList<int>();

	//  first, time the performance of genericLinkedList inserts
	System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
	watch.Start();

	for (int i = 0; i < 300000; i++)
		genericLinkedList.Insert(i, genericLinkedList.Count);

	watch.Stop();
	Console.WriteLine("Performance of Generics - {0}", watch.Elapsed.ToString());

	//  second, time the performance of objectsList inserts
	watch.Reset();
	watch.Start();

	for (int i = 0; i < 300000; i++)
		objectsList.Insert(i, objectsList.Count);

	watch.Stop();
	Console.WriteLine("\nPerformance of Object/Casting - {0}", watch.Elapsed.ToString());

	Console.WriteLine("\n\nPress any key to close window");
	Console.Read();
}

And the result:

Generics vs Objects - Performance Comparison
Generics vs Objects – Performance Comparison

So, it looks like the performance penalty of boxing the integers was enough to give generics a clear victory. And of this, I am glad. Generics are very cool and easy to use. So, finding out that they also perform well – that’s icing on the cake.

You can download the whole code for my test here.