public override FullEnumerationChangeBatch GetFullEnumerationChangeBatch(uint batchSize, SyncId lowerEnumerationBound, SyncKnowledge knowledgeForDataRetrieval, out object changeDataRetriever) { FullEnumerationChangeBatch batch = _metaData.GetFullEnumerationChangeBatch(batchSize, lowerEnumerationBound, knowledgeForDataRetrieval); changeDataRetriever = this; //this is where the transfer mechanism/protocol would go. For an in memory provider, this is sufficient //get total item for calculating estimated work if (!_fullEnumFirstCall) { uint allDeletedItems; _metaData.GetItemCount(out RemainingSessionWorkEstimate, out allDeletedItems); _fullEnumFirstCall = true; } //Calculate estimate work batch.RemainingSessionWorkEstimate = RemainingSessionWorkEstimate; batch.BatchWorkEstimate = batch.IsLastBatch ? (uint)batch.Count() : batchSize; RemainingSessionWorkEstimate = batch.IsLastBatch ? 0 : RemainingSessionWorkEstimate - batchSize; return(batch); }