Example #1
0
        public static void CellCleaningThreadProc(object par)
        {
            CellCleaningThreadObject p = (CellCleaningThreadObject)par;
            long start = -1;
            long end   = -1;
            long ele   = p.nodeNum / p.threadCount;

            if (p.threadCount != p.threadIndex + 1)
            {
                start = p.threadIndex * ele + 1;
                end   = start + ele;
            }
            else
            {
                start = p.threadIndex * ele + 1;
                end   = p.nodeNum + 1;
            }
            for (long i = start; i < end; i++)
            {
                using (var node = Global.LocalStorage.UseGraphNode(i))
                {
                    if (node.EdgeCount < node.Edges.Count)
                    {
                        node.Edges.RemoveRange(node.EdgeCount, node.Edges.Count - node.EdgeCount);
                    }
                }
            }
        }
Example #2
0
        public void CreatGraph()
        {
            int threadCount = Environment.ProcessorCount;

            Thread[] threadNum = new Thread[threadCount];
            ////////////////////////////////PHASE 1///////////////////////////////
            Console.WriteLine("Generating ID values");
            Stopwatch s = new Stopwatch();

            s.Start();
            TrinityConfig.CurrentRunningMode = RunningMode.Embedded;
            TrinityConfig.DefragInterval     = 2500;
            for (int threadIndex = 0; threadIndex < threadCount; threadIndex++)
            {
                NodeCreationThreadObject p = new NodeCreationThreadObject(threadCount, threadIndex);
                threadNum[threadIndex] = new Thread(CreateGraphNodeThreadProc);
                threadNum[threadIndex].Start(p);
            }
            for (int inde = 0; inde < threadCount; inde++)
            {
                threadNum[inde].Join();
            }
            s.Stop();
            Console.WriteLine("add idValue cost time:{0}", s.ElapsedMilliseconds);
            ////////////////////////////////PHASE 2///////////////////////////////
            Console.WriteLine("add edges");
            Stopwatch ss = new Stopwatch();

            ss.Start();
            for (int threadIndex = 0; threadIndex < threadCount; threadIndex++)
            {
                EdgeCreationThreadObject p = new EdgeCreationThreadObject(threadCount, threadIndex);
                threadNum[threadIndex] = new Thread(CreateEdgeThreadProc);
                threadNum[threadIndex].Start(p);
            }
            for (int inde = 0; inde < threadCount; inde++)
            {
                threadNum[inde].Join();
            }
            ss.Stop();
            Console.WriteLine("add outlinks cost time:{0}", ss.ElapsedMilliseconds);

            ///////////////Remove dirty outlinks//////////////
            Stopwatch watch = new Stopwatch();

            watch.Start();
            for (int threadIndex = 0; threadIndex < threadCount; threadIndex++)
            {
                CellCleaningThreadObject p = new CellCleaningThreadObject(threadCount, threadIndex, nodeCount);
                threadNum[threadIndex] = new Thread(CellCleaningThreadProc);
                threadNum[threadIndex].Start(p);
            }
            for (int inde = 0; inde < threadCount; inde++)
            {
                threadNum[inde].Join();
            }
            watch.Stop();
            Console.WriteLine(watch.ElapsedMilliseconds);
            TrinityConfig.DefragInterval = 100;
            ///////////////////////////////////////////////
            Stopwatch sss = new Stopwatch();

            sss.Start();
            Global.LocalStorage.SaveStorage();
            sss.Stop();
            Console.WriteLine("saveStorage cost time:{0}", sss.ElapsedMilliseconds);
            //foreach (var node in Global.LocalStorage.GraphNode_Selector())
            //{
            //    Console.WriteLine(node);
            //}
            //var results = from node in Global.LocalStorage.GraphNode_Accessor_Selector()
            //              select node;
            //Console.WriteLine(results.Distinct());
        }