예제 #1
0
        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;
            }
        }