public int StartDefragmentation() { int defragmentationTime = 0; if (_fileToBeDefragmented == 0) { if (_metadataPersister.DefragmentationNeeded()) { defragmentationTime = _metadataPersister.StartDefragmentation(); } } else { string dbId = GetFullDbId(_fileToBeDefragmented); FileMetadata <long, byte[]> fileMetadata = _fileMetadataDictionary[dbId]; if (fileMetadata == null) { throw new Exception("unable to find database file."); } if (fileMetadata.Provider.DefragmentationNeeded()) { defragmentationTime = fileMetadata.Provider.StartDefragmentation(); } } _fileToBeDefragmented++; if (_fileToBeDefragmented > _fileMetadataDictionary.Count) { _fileToBeDefragmented = 0; } return(defragmentationTime); }