我有一个非常简单的域类和一个控制器,虽然运行时消耗超过 400MB - 需要一些关于优化它的建议。
基本上我有两个域类A和B,它们处于两个一对多的关系中(实际上B类代表A类实例之间的多对多关系,-A的单个对象可以被多个B的对象引用作为“fromA”,A 的单个对象可以被多个 B 的对象引用为“toA”——就像 GORM 文档和航班和机场示例——A 是机场,B 是航班)。A 类是一个非常简单的领域类。
class A {
static hasMany = [fromAs:B, toAs:B]
static mappedBy = [fromAs:"fromA", toAs:"toA"]
int ...
String ...
// several simple fields
}
B 类也很简单,它只是以两种方式引用 A 类。
class B {
A fromA
A toA
int ...
String ...
// several simple fields
}
现在控制器所做的是将所有可能的“航班”信息填充到数据库中。它还对 int 进行了一些非常小的计算,作为这些 int 的设置,但为了使代码清晰,我跳过了它。
A.list().each{ tempFromA ->
A.list().each{ tempToA ->
def b = new B()
b.setFromA(tempFromA)
b.setToA(tempToA)
b.save(flush:false)
}
}
这就是所有代码,它消耗超过 400MB od RAM。我尝试每插入 10 000 条记录调用 hiernateSession.flush() ,但总是在提交 120 000 到 300 000 条记录后,就会发生内存不足。
数据库中有 610 个 A,因此嵌入式循环有超过 370 000 个周期 (610x610)。
任何指南如何在内存消耗方面优化此代码?它是如此简单的代码,可能我在这里做一些非常愚蠢的事情......