次の方法で共有


IReplicaMetadata::CleanupDeletedItems

削除済みマークが付いており、前回のクリーンアップ日時より古い項目を消去します。

構文

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 を定期的に (たとえばプロバイダーが変更検出を実行するたびに) 呼び出すこともできます。CleanupDeletedItems では、ulTimeIntervalInMilliseconds の間、削除マークが付いた削除済み項目を常に保管しておくことで、負荷の大きい完全列挙からプロバイダーを保護できます。

CleanupDeletedItems の初回呼び出し時には、前回のクリーンアップ時刻として現在の日時が保存され、それ以外の処理は行われません。

それ以降は、CleanupDeletedItems を呼び出すたびに以下の手順が実行されます。

  1. 現在の日時と前回クリーンアップが正常に実行された日時を比較します。経過時間が ulTimeIntervalInMilliseconds より短い場合は、それ以上の処理は実行されず、S_FALSE が返されます。

  2. 前回のクリーンアップ時より古い項目を検出して、すべて消去します。

  3. 現在の日時を、前回クリーンアップが正常に実行された日時として保存します。

  4. 忘れられたナレッジを更新して、消去された削除済み項目を反映させます。

CleanupDeletedItems は前回の正常なクリーンアップより前に削除済みとマークされていた項目だけをクリーンアップし、前回の正常なクリーンアップ以降に削除済みとマークされた項目はクリーンアップしないので注意してください。たとえば、CleanupDeletedItems が項目をクリーンアップして現在の日時を保存したとします。24 日後に、ulTimeIntervalInMilliseconds を 20 日と指定して CleanupDeletedItems が再度呼び出された場合、CleanupDeletedItems は、クリーンアップが最後に正常に実行された 24 日前より古い削除済み項目のみを消去します。24 日前と 20 日前の間 (たとえば 22 日前) に削除済みとマークされた項目は消去されません。20 日を経過していない削除済み項目も消去されません。

注意

ulTimeIntervalInMilliseconds に 0 の値を指定するのは特別なケースで、メタデータ ストア内の削除済み項目がすべて消去されます。このような処理は、同期コミュニティ内の他のレプリカがすべて相互に同期しているという確信がプロバイダー側にある場合にのみ実行してください。削除済み項目の消去が早すぎると、Sync Framework で完全な列挙が必要になる可能性があります。

関連項目

その他の技術情報

IReplicaMetadata インターフェイス