public static void Main() { Graph graph = new Graph(); const int nodes = 30000; const int loops = 10; const int outerLoops = 20; for (int i = 0; i < nodes; i++) { graph.CreateNode(); } for (int loop = 0; loop < outerLoops; loop++) { Console.Write("."); t1.Start(); INodeMap map = graph.CreateNodeMap(); for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { Node v = nc.Node; map.SetInt(v, i); i = map.GetInt(v); } } graph.DisposeNodeMap(map); t1.Stop(); t2.Start(); map = Maps.CreateIndexNodeMap(new int[graph.N]); for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { Node v = nc.Node; map.SetInt(v, i); map.GetInt(v); } } t2.Stop(); t3.Start(); map = Maps.CreateHashedNodeMap(); for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { Node v = nc.Node; map.SetInt(v, i); i = map.GetInt(v); } } t3.Stop(); t4.Start(); int[] array = new int[graph.N]; for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { int vid = nc.Node.Index; array[vid] = i; i = array[vid]; } } t4.Stop(); t5.Start(); IDictionary <Node, int> dictionary = new Dictionary <Node, int>(2 * graph.N + 1); //use map with good initial size for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { Node v = nc.Node; dictionary[v] = i; i = dictionary[v]; } } t5.Stop(); t6.Start(); IDictionary <Node, object> objectDictionary = new Dictionary <Node, object>(2 * graph.N + 1); //use map with good initial size for (int i = 0; i < loops; i++) { for (INodeCursor nc = graph.GetNodeCursor(); nc.Ok; nc.Next()) { Node v = nc.Node; objectDictionary[v] = i; i = (int)objectDictionary[v]; } } t6.Stop(); } Console.WriteLine(""); Console.WriteLine("TIME: standard NodeMap : " + t1); Console.WriteLine("TIME: index NodeMap : " + t2); Console.WriteLine("TIME: hashed NodeMap : " + t3); Console.WriteLine("TIME: plain array : " + t4); Console.WriteLine("TIME: Dictionary : " + t5); Console.WriteLine("TIME: object Dictionary : " + t6); Console.WriteLine("\nPress key to end demo."); Console.ReadKey(); }