Snippets
Created by
Alex Darby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
namespace timingListvsIlistvsarray
{
internal class Program
{
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 )
{
list.Add( i );
}
float[] array = list.ToArray();
Profile
(
"array as array",
1,
() =>
{
ProcessArray( array );
}
);
Profile
(
"list as list",
1,
() =>
{
ProcessList( list );
}
);
Profile
(
"array as IList",
1,
() =>
{
ProcessIList( array );
}
);
Profile
(
"List as IList",
1,
() =>
{
ProcessIList( list );
}
);
System.Console.Read();
}
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;
// warm up
func();
var watch = new Stopwatch();
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
watch.Start();
for( int i = 0; i < iterations; i++ )
{
func();
}
watch.Stop();
Console.Write( description );
Console.WriteLine( " Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds );
return watch.Elapsed.TotalMilliseconds;
}
}
}
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.