private static long TestInIncreasingOrder(int maxDegree) { long memBefore = GC.GetTotalMemory(false); Stopwatch sw = Stopwatch.StartNew(); BPlusTree <long, Measurement> bPlusTree = new BPlusTree <long, Measurement>(maxDegree); for (int i = 1; i <= NUMBER_OF_INSERTION; i++) { bPlusTree.Insert(i, new Measurement()); } sw.Stop(); long memAfter = GC.GetTotalMemory(false); Console.WriteLine("Increasing order. Insert {0} elements: {1} ms", NUMBER_OF_INSERTION, sw.ElapsedMilliseconds); Console.WriteLine("Memory: {0} MBytes", (memAfter - memBefore) / 1024 / 1024); Console.WriteLine("Height: {0} ", bPlusTree.GetHeight()); HashSet <long> allWrittenNumbers = new HashSet <long>(); for (int i = 1; i <= NUMBER_OF_INSERTION; i++) { allWrittenNumbers.Add(i); } CheckCorrectness(bPlusTree, allWrittenNumbers); return(sw.ElapsedMilliseconds); }
private static void TestInRandomOrder2() { Random rnd = new Random(Environment.TickCount); HashSet <long> allWrittenNumbers = new HashSet <long>(); for (int i = 1; i <= 87; i++) { int value = rnd.Next(); while (allWrittenNumbers.Contains(value)) { value = rnd.Next(); } allWrittenNumbers.Add(value); } long memBefore = GC.GetTotalMemory(false); Stopwatch sw = Stopwatch.StartNew(); BPlusTree <long, Measurement> bPlusTree = new BPlusTree <long, Measurement>(12); foreach (var value in allWrittenNumbers) { bPlusTree.Insert(value, new Measurement()); } sw.Stop(); long memAfter = GC.GetTotalMemory(false); Console.WriteLine("Random order. Insert {0} elements: {1} ms", NUMBER_OF_INSERTION, sw.ElapsedMilliseconds); Console.WriteLine("Memory: {0} MBytes", (memAfter - memBefore) / 1024 / 1024); Console.WriteLine("Height: {0} ", bPlusTree.GetHeight()); CheckCorrectness(bPlusTree, allWrittenNumbers); }
private static void TestInRandomOrder2(int maxDegree, long[] original) { Random rnd = new Random(Environment.TickCount); var copy = original.ToArray(); Array.Sort(copy); long id = 1; Dictionary <long, long> dict = new Dictionary <long, long>(); foreach (var item in copy) { dict[item] = id; id++; } foreach (var value in original) { Console.WriteLine(dict[value]); } long memBefore = GC.GetTotalMemory(false); Stopwatch sw = Stopwatch.StartNew(); BPlusTree <long, Measurement> bPlusTree = new BPlusTree <long, Measurement>(maxDegree); foreach (var value in original) { bPlusTree.Insert(value, new Measurement()); Console.WriteLine("Total number of elements: {0}", bPlusTree.Count); } Helpers.CheckNodes(bPlusTree.Root); sw.Stop(); long memAfter = GC.GetTotalMemory(false); Console.WriteLine("Random order. Insert {0} elements: {1} ms", NUMBER_OF_INSERTION, sw.ElapsedMilliseconds); Console.WriteLine("Memory: {0} MBytes", (memAfter - memBefore) / 1024 / 1024); Console.WriteLine("Height: {0} ", bPlusTree.GetHeight()); CheckCorrectness(bPlusTree, original); }
private static long TestInDecreasingOrder(int maxDegree) { long memBefore = GC.GetTotalMemory(false); Stopwatch sw = Stopwatch.StartNew(); { BPlusTree <long, Measurement> bPlusTree = new BPlusTree <long, Measurement>(maxDegree); for (int i = NUMBER_OF_INSERTION; i >= 1; i--) { bPlusTree.Insert(i, new Measurement()); } sw.Stop(); long memAfter = GC.GetTotalMemory(false); Console.WriteLine("BPlusTree: "); Console.WriteLine("Decreasing order. Insert {0} elements: {1} ms", NUMBER_OF_INSERTION, sw.ElapsedMilliseconds); Console.WriteLine("Memory: {0} MBytes", (memAfter - memBefore) / 1024 / 1024); Console.WriteLine("Height: {0} ", bPlusTree.GetHeight()); HashSet <long> allWrittenNumbers = new HashSet <long>(); for (int i = NUMBER_OF_INSERTION; i >= 1; i--) { allWrittenNumbers.Add(i); } CheckCorrectness(bPlusTree, allWrittenNumbers); } sw = Stopwatch.StartNew(); { var bPlusTree = new BPlusTreeRW <long, Measurement>(maxDegree); List <Task> tasks = new List <Task>(); for (int i = NUMBER_OF_INSERTION; i >= 1; i--) { bPlusTree.Insert(i, new Measurement()); if (i == NUMBER_OF_INSERTION) { tasks.Add(Task.Factory.StartNew(() => { long res = 0; for (int k = NUMBER_OF_INSERTION; k >= 1; k--) { Measurement value; bPlusTree.TryFindExact(k, out value); res += value.Id; } Console.WriteLine("Result: {0}", res); })); tasks.Add(Task.Factory.StartNew(() => { long res = 0; for (int k = NUMBER_OF_INSERTION; k >= 1; k--) { Measurement value; bPlusTree.TryFindExact(k, out value); res += value.Id; } Console.WriteLine("Result: {0}", res); })); tasks.Add(Task.Factory.StartNew(() => { long res = 0; for (int k = NUMBER_OF_INSERTION; k >= 1; k--) { Measurement value; bPlusTree.TryFindExact(k, out value); res += value.Id; } Console.WriteLine("Result: {0}", res); })); } } Task.WaitAll(tasks.ToArray()); sw.Stop(); long memAfter = GC.GetTotalMemory(false); Console.WriteLine("BPlusTreeRW: "); Console.WriteLine("Decreasing order. Insert {0} elements: {1} ms", NUMBER_OF_INSERTION, sw.ElapsedMilliseconds); Console.WriteLine("Memory: {0} MBytes", (memAfter - memBefore) / 1024 / 1024); Console.WriteLine("Height: {0} ", bPlusTree.GetHeight()); } return(sw.ElapsedMilliseconds); }