我使用ibatis作为我的sql insert stmt。在我的代码中,我正在从文件夹中逐行解析文件。每条符合条件的行都需要插入数据库。 单次运行程序中的插入总数可以是沿200k的任何位置。
SqlSession sess = null;
this.sess = sf.openSession(ExecutorType.BATCH, false);
for (each file) {
for( each line matching criteria ){
this.sess.insert("com.logs.util.insertFileInfo", fileData);
insertcount++;
if(insert count == 10)
this.sess.commit();
}
}
if(insert count > 0){
this.sess.commit();
}
}
这种风格慢慢占用大量内存,并在一段时间后抛出OutOfMemory异常。 如何在这里提高绩效?
答案 0 :(得分:0)
你是否有意在每10次插入后提交?看起来你只能在前10次插入后才这样做。我想你需要像
这样的东西if ((insertCount % 10) == 0) {
this.sess.commit();
}
那些未提交的更改必须存储在某处。我不熟悉Ibatis,但是如果未提交的更改存储在Ibatis分配的缓冲区中,那么如果不提交更改,最终会耗尽内存。