Exemplo n.º 1
0
        private void btnCrawl_Click(object sender, EventArgs e)
        {
            var w      = Stopwatch.StartNew();
            var status = m_Pile.Crawl(true);

            Text = "Crawl {0} in {1:n0} ms".Args(status, w.ElapsedMilliseconds);
        }
Exemplo n.º 2
0
        public void PileSmallObjects(int payloadSize, params int[] freeChunkSizes)
        {
            using (var pile = new DefaultPile()
            {
                SegmentSize = PileCacheTestCore.SEG_SIZE, AllocMode = AllocationMode.ReuseSpace
            })
            {
                pile.FreeChunkSizes = freeChunkSizes;

                pile.Start();

                var pps = new List <PilePointer>();
                while (pile.SegmentCount < 2)
                {
                    pps.Add(pile.Put(generatePayload(payloadSize)));
                }

                pile.Delete(pps.Last());
                pps.RemoveAt(pps.Count - 1);

                Console.WriteLine("just removed the last added payload and segment should be 1 now, real segment count is {0}", pile.SegmentCount);

                var objectsInFirstSegment = pps.Count;

                Console.WriteLine("put {0:N0} objects in first segment, pile.ObjectCount {1:N0}", objectsInFirstSegment, pile.ObjectCount);

                var deletedObjectCount = 0;
                for (int i = 0; i < pps.Count; i += 2, deletedObjectCount++)
                {
                    Assert.IsTrue(pile.Delete(pps[i]));
                }

                Console.WriteLine("deleted {0:N0} objects, pile.ObjectCount {1:N0}", deletedObjectCount, pile.ObjectCount);

                var crawlStatus = pile.Crawl(false);
                Console.WriteLine("crawl: {0}", crawlStatus);

                var pps1 = new List <PilePointer>();
                var c    = 0;
                while (pile.SegmentCount < 3)
                {
                    pps1.Add(pile.Put(generatePayload(payloadSize)));
                    if (c % 20000 == 0)
                    {
                        pile.Crawl(true);      //we do crawl because otherwise the 25000 free index xlots get exhausted AND
                    }
                    c++;                       //this unit tests does not run long enough to cause Crawl within allocator (5+ seconds)
                }                              //so we induce Crawl by hand to rebiild indexes

                pile.Delete(pps1.Last());
                pps1.RemoveAt(pps1.Count - 1);

                Console.WriteLine("again just removed the last added payload and segment should be 2 now, real segment count is {0}", pile.SegmentCount);

                var objectsInSecondSegment = pps1.Count;

                Console.WriteLine("put {0:N0} objects in second segment, pile.ObjectCount {1:N0}", objectsInSecondSegment, pile.ObjectCount);

                Assert.AreEqual(objectsInFirstSegment * 2, pile.ObjectCount, "Object count in pile with two full segments must be equal to double object count in full first segment!");
            }
        }