public SegmentCrawlStatus Sum(SegmentCrawlStatus other)
                              {
                                  return(new SegmentCrawlStatus(
                                             ObjectCount + other.ObjectCount,
                                             ObjectLinkCount + other.ObjectLinkCount,

                                             CrawledChunks + other.CrawledChunks,
                                             OriginalFreeChunks + other.OriginalFreeChunks,
                                             ResultFreeChunks + other.ResultFreeChunks,
                                             FreePayloadSize + other.FreePayloadSize,
                                             UsedPayloadSize + other.UsedPayloadSize
                                             ));
                              }
Example #2
0
      /// <summary>
      /// Analyzes all segments scanning for free spaces. Returns number of uncovered free bytes.
      /// This is a full-blocking long operation that may take around 8 seconds on a 64Gb heaps in non-parallel mode
      /// </summary>
      public SegmentCrawlStatus Crawl(bool parallel)
      {
        SegmentCrawlStatus total = new SegmentCrawlStatus();
        var segs = m_Segments.Where(s => s!=null);
        
        if (parallel)
        {
           var lck = new object();
           Parallel.ForEach(segs, (seg) =>
           {
              if (!getWriteLock(seg)) return;
              try
              {
                var status = seg.Crawl();
                lock(lck){ total = total.Sum(status);}
              }
              finally
              {
                releaseWriteLock(seg);
              }
           });
        }
        else
           foreach(var seg in segs)
           {
              if (!getWriteLock(seg)) return total;
              try
              {
                total = total.Sum(seg.Crawl());
              }
              finally
              {
                releaseWriteLock(seg);
              }
           }

        return total;
      }
Example #3
0
 public SegmentCrawlStatus Sum(SegmentCrawlStatus other)
 {
   return new SegmentCrawlStatus(
    CrawledChunks      + other.CrawledChunks       ,
    OriginalFreeChunks + other.OriginalFreeChunks  ,
    ResultFreeChunks   + other.ResultFreeChunks    ,
    FreePayloadSize    + other.FreePayloadSize     ,
    UsedPayloadSize    + other.UsedPayloadSize     
   );
 }