オブジェクトへのWeakReferencesを含むコレクションがあります。オブジェクトは実行時に動的にロードされ、GCによってランダムに収集できます。
ときどき、オブジェクトを完全に削除する必要があります。これは非同期DBコマンドで実行されます。意味-削除コマンドと永続性データベースでの削除の実際のコミットの間に、オブジェクトをGCしてから、DBから再ロードできる期間があります。
これを解決する最も簡単な方法は、各オブジェクトに「削除済み」フラグを設定することです(すでに1つあります)。削除アクションを実行するときに、削除されたオブジェクトへの強力な参照をDBコマンドオブジェクトに追加します。操作が完了すると、強力な参照が失われ、オブジェクトを永久に解放できます。
問題は、GCが先読みでオブジェクトを収集することを許可されているかどうかです。このシナリオに適用されますか?DBコマンドがデキューされて処理されるまで、オブジェクトが収集されないことが保証されていますか?
下位レベルの詳細は次のとおりです。
Dictionary<Int64, WeakReference> mItems;
struct IOCommand
{
public CommandDetails command;
public object[] strongReferences;
}
Queue<IOCommand> mIOQueue;
void queueCommand(CommandDetails command, object relatedObject)
{...}
コマンドをキューに入れるときに、関連するオブジェクトを、処理されるまでキューに保持されている強力な参照として渡しますが、オブジェクトが使用されていないため、最適化できるかどうかが問題になります...
アミット。