public void Execute() { var deleteSet = new HashSet <ulong>( _pks.Select(x => x.ToHash()).ToList()); foreach (var ix in _ixs) { var dataFile = Path.Combine(_directory, ix.Key + ".rdb"); using (var stream = new FileStream(dataFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { stream.Seek(ix.Value.DocHashOffset, SeekOrigin.Begin); var buffer = new byte[DocumentSerializer.SizeOfDocHash()]; while (stream.Position < ix.Value.DocAddressesOffset) { stream.Read(buffer, 0, buffer.Length); var hash = DocumentSerializer.DeserializeDocHash(buffer); if (deleteSet.Contains(hash.Hash)) { stream.Position = stream.Position - buffer.Length; buffer[0] = 1; stream.Write(buffer, 0, buffer.Length); deleteSet.Remove(hash.Hash); } if (deleteSet.Count == 0) { break; } } } } }