我有一个带有 WeakReferences 对象的集合。对象在运行时动态加载,可以被 GC 随机回收。
有时,我需要永久删除一个对象,这是通过异步 DB 命令完成的。含义 - 在删除命令和实际提交持久性数据库中的删除之间有一个时间段,可以对对象进行 GC,然后从数据库中重新加载。
我解决这个问题的最简单方法是在每个对象中都有一个“已删除”标志(已经有一个),并且在执行删除操作时,将对已删除对象的强引用添加到 DB Command 对象,所以当操作完成后强引用丢失,对象可以被永久释放。
问题是,GC 是否允许通过预读来收集我的对象?它适用于这种情况吗?我是否保证在 DB 命令出列并处理之前不会收集该对象?
以下是一些较低级别的详细信息:
Dictionary<Int64, WeakReference> mItems;
struct IOCommand
{
public CommandDetails command;
public object[] strongReferences;
}
Queue<IOCommand> mIOQueue;
void queueCommand(CommandDetails command, object relatedObject)
{...}
您可以看到,在对命令进行排队时,我将相关对象作为强引用传递给队列,直到它被处理为止,但是由于未使用该对象,问题是它们是否可以被优化掉......
阿米特。