我有以下内容:
def foo
33
end
foo = 44
>foo
#=> 44
>foo() #also you can call it by: self.foo || My omission, thanks @CarySwoveland
#=> 33
这种方法有两次调用,一次输入大小为~28000,一次输入大小为~32000,因此在大小方面差别不大。
然而,后者需要更长的时间才能运行。我的问题是什么会导致这个函数运行一次而不是另一次?鉴于所有其他属性在两者之间是相等的,我希望这些属性在相似的时间内完成。
我的理解是public void batchSave(Iterable<T> entities) {
int i = 0;
for (T entity : entities) {
session.update(entity);
i++;
if (i % BATCH_SIZE == 0) {
session.flush();
session.clear();
}
}
session.flush();
session.clear();
}
发布了对DB的更新,但我应该注意到,在32000组中,几乎所有对象都已经修改了状态,而对于28000只有大约5000个有。即便如此,28000大小的收集可能需要2秒,而略大的收集似乎可以运行几分钟。
答案 0 :(得分:0)
这可能是因为auto (deferred) flushing。将它们分成两个不同的交易,速度可能更具可比性。
答案 1 :(得分:0)
由于后一个表没有正确编入索引,所以这是一个疏忽,因此更新在DB上花费的时间更长。