+using System.Collections.Generic;
+using System.Diagnostics;
+namespace timingListvsIlistvsarray
+ private const int k_iNumInContainer = 50000;
+ private static void Main( string[] args )
+ var list = new List<float>();
+ for( int i = 0; i < k_iNumInContainer; ++i )
+ float[] array = list.ToArray();
+ private static float ProcessArray( float[] array )
+ float accumulator = 0f;
+ int count = array.Length;
+ for( int i = 0; i < count; ++i )
+ array[ i ] = ( ( accumulator + array[ i ] ) / ( (float)i ) );
+ return ( accumulator / ( (float)count ) );
+ private static float ProcessList( List<float> list )
+ float accumulator = 0f;
+ int count = list.Count;
+ for( int i = 0; i < count; ++i )
+ list[ i ] = ( ( accumulator + list[ i ] ) / ( (float)i ) );
+ return ( accumulator / ( (float)count ) );
+ private static float ProcessIList( IList<float> interfaceList )
+ float accumulator = 0f;
+ int count = interfaceList.Count;
+ for( int i = 0; i < count; ++i )
+ interfaceList[ i ] = ( ( accumulator + interfaceList[ i ] ) / ( (float)i ) );
+ return ( accumulator / ( (float)count ) );
+ // from https://stackoverflow.com/questions/1047218/benchmarking-small-code-samples-in-c-can-this-implementation-be-improved
+ private static double Profile( string description, int iterations, Action func )
+ //Run at highest priority to minimize fluctuations caused by other processes/threads
+ Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
+ Thread.CurrentThread.Priority = ThreadPriority.Highest;
+ var watch = new Stopwatch();
+ GC.WaitForPendingFinalizers();
+ for( int i = 0; i < iterations; i++ )
+ Console.Write( description );
+ Console.WriteLine( " Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds );
+ return watch.Elapsed.TotalMilliseconds;