コード例 #1
0
ファイル: Program.cs プロジェクト: samhu70/tsdb4net
        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);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: samhu70/tsdb4net
        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);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: samhu70/tsdb4net
        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);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: samhu70/tsdb4net
        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);
        }