public IEnumerable <IndexRange> GetUploadableRanges() { IEnumerable <IndexRange> ranges = GetPageRanges(); ranges = Enumerable.ToList <IndexRange>(IndexRangeHelper.ChunkRangesBySize(ranges, 2 * MegaByte)); return(ranges); }
protected static void PopulateContextWithUploadableRanges(FileInfo vhdFile, UploadContextDisk context, bool resume) { using (var vds = new VirtualDiskStream(vhdFile.FullName)) { IEnumerable <IndexRange> ranges = vds.Extents.Select(e => e.Range).ToArray(); var bs = new BufferedStream(vds); // linear still var uploadableRanges = IndexRangeHelper.ChunkRangesBySize(ranges, PageSizeInBytes).ToArray(); // detecting empty data blocks line. Takes long var nonEmptyUploadableRanges = GetNonEmptyRanges(bs, uploadableRanges).ToArray(); context.UploadableDataSize = nonEmptyUploadableRanges.Sum(r => r.Length); context.UploadableRanges = nonEmptyUploadableRanges; } }