我正在使用Doctrine进行批处理。我正在处理更多的实体。为了节省内存,我使用了可迭代的结果。在http://docs.doctrine-project.org/en/2.0.x/reference/batch-processing.html上的示例中,Entity-Manager :: clear()或Entity-Manager :: detach在批处理操作中被调用。
如果我错了,请纠正我:
如果您不分离实体,如果您正在处理大量实体,则会遇到内存问题
如果您是独立运行批处理,没问题。但是,如果批处理是较大任务的一部分,则可能会导致问题。
E.g。在批处理之前使用该实体。在批处理期间,实体被分离,在批处理之后,实体将不会保存到db(如预期的那样)。
是否可以仅分离仅在批处理中使用而不在外部处理的实体?
是否有其他解决方案,而不是使用单独的实体管理器或在隔离环境中进行批处理。
我知道一般来说同步进行批处理是没有意义的。
答案 0 :(得分:0)
唯一的解决方案是隔离批处理。在隔离环境中,您可以使用清除/分离,没有任何副作用。但是,如果处理大量实体,即使清除身份映射,内存消耗也会缓慢上升,取消设置所有实体并手动调用垃圾收集器。似乎是使用php和doctrine的价格。然而,这不是一个真正的问题。
如果您不在隔离环境中进行批处理,则分离(某些)实体/清除身份映射可能会导致市长问题。