Breeze 如何";处置;实体管理者

Breeze 如何";处置;实体管理者,breeze,Breeze,我们采取的方法是,每次加载用于编辑记录的视图时创建一个新的EntityManager(以支持工作单元模式) 我们是否需要做一些特殊的事情来允许对EntityManager进行垃圾收集?我相信我们正在释放对管理器的所有引用,但Chrome的“拍摄堆快照”工具没有显示在我们离开视图时删除EntityManager(或任何实体) 我看到每个实体的entityAspect.entityManager都包含对经理的引用。这会阻止所有内容被垃圾收集吗?似乎需要调用entityManager.clear()来

我们采取的方法是,每次加载用于编辑记录的视图时创建一个新的EntityManager(以支持工作单元模式)

我们是否需要做一些特殊的事情来允许对EntityManager进行垃圾收集?我相信我们正在释放对管理器的所有引用,但Chrome的“拍摄堆快照”工具没有显示在我们离开视图时删除EntityManager(或任何实体)


我看到每个实体的
entityAspect.entityManager
都包含对经理的引用。这会阻止所有内容被垃圾收集吗?

似乎需要调用
entityManager.clear()
来将所有实体从管理器中分离,然后允许所有内容被垃圾收集。

这是正确的,每个实体都持有对其entityManager的引用,entityManager跟踪其所有实体。因此,要清除内存,您需要从entityManager分离所有实体,并丢弃对实体的任何引用。EntityManager.clear执行第一个操作,但是您仍然需要“丢失”对任何实体的任何引用。如果我丢失了对EntityManager及其实体的所有引用,那么不调用EntityManager.clear()就可以对所有内容进行垃圾收集了吗?每个实体持有对其经理的引用非常方便,但这会创建循环引用。实体使管理器保持活动状态,而管理器使实体保持活动状态。唯一的办法就是调用
entityManager.clear()
这里涉及到更多的循环引用。例如,双向关联或EntityAspect对Entity的反向引用。我认为entityManager.clear()允许您在需要保留管理器时分离实体。