(In reply to comment #2) > Let me offer a refinement of the original idea: instead of only > processing a subset of the phone's contacts per sync, let's split the > sync itself into more phases: > * Start at offset x into the set of contacts. > * Download n contacts and update the local database with them. > * Update x persistently. > * Repeat and role over until we have dealt with all contacts. > * Then delete all local contacts which had no match on the phone > anymore. It could be even simpler: * Start at offset x. * Download, process in parallel. * Download more chunks until done. However, after discussing the "Offset" value with Luiz van Dentz, our conclusion was that the value is poorly defined: it is not clear whether it is based on the original numbering of contacts (in which case one could ask for contacts #10-#19 and not get any because all of those were deleted) or counts all current non-deleted contacts. Depending on a feature that is poorly defined, probably not used much and has corner cases which are even rarer and hard to test (contacts deleted while syncing) is asking for trouble. Download times are small enough that the theoretic advantage of downloading in chunks may never matter in practice. Taking all of that into account, I don't intend to implement downloading in chunks anymore.