使用Play Framework,利用默认的Entity Manager,当有多条数据插入时,效率会变得越来越慢。例如现有一个model User,有10000个新建User需要保存到数据库,利用new User().save()来保存数据到数据库,通过计算执行时间,可以发现同样保存一个User花费的时间越来越多。通过Google搜索发现,每次通过Hibernate插入数据后,产生的对象并没有对垃圾回收器收集,而是被session 对象纳入了管理。也就是说随着你的插入增多,session中的对象也越来越多,直到达到10万的数量级。所以需要的时间越来越多。
继续搜索发现如下的回答:
Each 1000 lines, i launch the following function: private void commit() { Line.em().getTransaction().commit(); Line.em().getTransaction().begin(); Line.em().flush(); Line.em().clear(); } with "Line.em().clear();", the Used Heap and Relative Time Spent in GC are oscillating (and not infinite increasing).