All pastes #255747 Raw Edit

zeroflag

public text v1 · immutable
#255747 ·published 2006-11-23 09:02 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;

namespace ListTest
{
	class Program
	{
		const int IMAX = int.MaxValue / 200; // / 200 is the limit on my machine (Core2Duo, 2GB ram)
		static void Main(string[] args)
		{
			Console.WriteLine("Working with " + IMAX.ToString() + " string values.\n");

			double value;
			string res;
			TimeSpan result;
			DateTime time;

			#region List benchmarks
			{
				// list is not really a list, but an array that is resized as needed. (a vector in c++)
				List<string> list = new List<string>();

				Console.WriteLine("List growing at the end");

				time = DateTime.Now;
				for (int i = IMAX; i >= 0; i--)
				{
					value = i % 100 * i / 100;
					list.Add(value.ToString());
				}
				result = DateTime.Now - time;
				Console.WriteLine(" inserts:\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");


				time = DateTime.Now;
				for (int i = 0; i < IMAX; i++)
				{
					res = list[i];
				}
				result = DateTime.Now - time;
				Console.WriteLine(" reads:\t\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");
			}
			#endregion List benchmarks

			Console.WriteLine();
			GC.Collect();
			#region Hashtable benchmarks
			{
				// dictionary is implemented as a hashtable.
				Dictionary<int, string> dict = new Dictionary<int, string>();

				Console.WriteLine("Hashtable");

				time = DateTime.Now;
				for (int i = IMAX; i >= 0; i--)
				{
					value = i % 100 * i / 100;
					dict.Add(i, value.ToString());
				}
				result = DateTime.Now - time;
				Console.WriteLine(" inserts:\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");

				time = DateTime.Now;
				for (int i = 0; i < IMAX; i++)
				{
					res = dict[i];
				}
				result = DateTime.Now - time;
				Console.WriteLine(" reads:\t\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");
			}
			#endregion Hashtable benchmarks
			Console.WriteLine();
			GC.Collect();
			#region LinkedList benchmarks
			{
				// list is not really a list, but an array that is resized as needed. (a vector in c++)
				LinkedList<string> list = new LinkedList<string>();

				Console.WriteLine("LinkedList");

				time = DateTime.Now;
				for (int i = IMAX; i >= 0; i--)
				{
					value = i % 100 * i / 100;
					list.AddFirst(value.ToString());
				}
				result = DateTime.Now - time;
				Console.WriteLine(" inserts:\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");


				time = DateTime.Now;
				LinkedList<string>.Enumerator enumerator = list.GetEnumerator();
				do
				{
					res = enumerator.Current;
				}
				while (enumerator.MoveNext());
				
				result = DateTime.Now - time;
				Console.WriteLine(" reads:\t\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms (sequence)");
			}
			#endregion List benchmarks
			Console.WriteLine();
			GC.Collect();
			#region List benchmarks
			{
				// list is not really a list, but an array that is resized as needed. (a vector in c++)
				List<string> list = new List<string>();

				Console.WriteLine("List inserting at index 0 (press ctrl+c to cancel - this takes ages)");

				time = DateTime.Now;
				for (int i = IMAX; i >= 0; i--)
				{
					value = i % 100 * i / 100;
					list.Insert(0, value.ToString());
					//if (i % 10000 == 0)
					//    Console.Write(((1 - ((double)i / (double)IMAX)) * 100) + "\r");
				}
				result = DateTime.Now - time;
				Console.WriteLine(" inserts:\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");


				time = DateTime.Now;
				for (int i = 0; i < IMAX; i++)
				{
					res = list[i];
				}
				result = DateTime.Now - time;
				Console.WriteLine(" reads:\t\t " + ((int)result.TotalMilliseconds).ToString().PadLeft(9) + " ms");
			}
			#endregion List benchmarks

		}
	}
}