删除标记为已删除且早于上次成功清除时间的项。
HRESULT CleanupDeletedItems(
ULONGLONG ulTimeIntervalInMilliseconds);
参数
- ulTimeIntervalInMilliseconds
[in] 已删除项在元数据存储区中的最短保留期。值 0 意味着立即清除所有已删除项。
返回值
S_OK
如果未执行清除操作,则返回值为 S_FALSE。
E_OUTOFMEMORY
如果未打开显式事务,则返回值为 SYNC_E_METADATA_ACTIVE_TRANSACTION_REQUIRED。
如果发生无效操作,则返回值为 SYNC_E_INVALID_OPERATION。
备注
此方法可帮助提供程序定时清除已删除项。ulTimeIntervalInMilliseconds 指定的时间间隔是已删除项在元数据存储区中的最短保留期。由于它仅在经过 ulTimeIntervalInMilliseconds 时间后才清除已删除项,因此可以定期(如提供程序每次执行变更检测时)调用 CleanupDeletedItems。通过始终在 ulTimeIntervalInMilliseconds 期间保存标记为已删除的已删除项,CleanupDeletedItems 有助于防止提供程序进行占用大量资源的完全枚举。
第一次调用 CleanupDeletedItems 时,它会将当前时间存储为上次成功清除时间,并且不会采取任何其他操作。
之后每次调用 CleanupDeletedItems 时,都会执行下列步骤:
将当前时间与上次成功清除时间进行对比。如果经过的时间小于 ulTimeIntervalInMilliseconds,则不采取任何操作,并返回 S_FALSE。
删除所有早于上次成功清除时间的已删除项。
将当前时间保存为上次成功清除时间。
更新遗忘知识以反映删除的已删除项。
请注意,CleanupDeletedItems 仅清除上次成功清除时间之前标记为已删除的项,而不会清除上次成功清除时间之后标记为已删除的项。例如,CleanupDeletedItems 成功地清除了项,并存储了当前时间。24 天以后,再次调用 CleanupDeletedItems,并将 ulTimeIntervalInMilliseconds 指定为 20 天。CleanupDeletedItems 仅删除 24 天之前的已删除项,原因是上次成功执行清除操作的时间是在 24 天前。将不会删除在 24 和 20 天前之间(如 22 天前)标记为已删除的项。也不会删除不足 20 天的已删除项。
备注
将 ulTimeIntervalInMilliseconds 指定为值 0 是一个特例,这样会将所有已删除项从元数据存储区中删除。只有当提供程序有理由确认同步社区中的其他所有副本互相同步时才能这样做,因为过分删除已删除项可能引起 Sync Framework 执行完全枚举。