0

SQL挿入stmtにibatisを使用しています。私のコードでは、フォルダーからファイルを 1 行ずつ解析しています。基準に一致する各行をデータベースに挿入する必要があります。プログラムの 1 回の実行での挿入の合計数は、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 例外をスローします。ここでパフォーマンスを向上させるにはどうすればよいですか?

4

1 に答える 1

0

10回の挿入ごとにコミットするつもりですか? 最初の10回の挿入後にのみそうするようです。次のようなものが必要になると思います

if ((insertCount % 10) == 0) {
   this.sess.commit();
}

これらのコミットされていない変更は、どこかに保存する必要があります。私は Ibatis に詳しくありませんが、コミットされていない変更が Ibatis によって割り当てられたバッファーに格納されている場合、変更をコミットしないと最終的にメモリ不足になります。

于 2010-10-19T16:21:18.177 に答える