ormlite 일괄 처리 작업

4621 단어 orm
ormlite 의 일괄 처리 속 도 를 높이다.
http://stackoverflow.com/quegoogstions/11761472/ormlites-createorupdate-seems-slow-what-is-normal-speed
 
This may be the "expected" speed unfortunately. Make sure you are using ORMLite version 4.39 or higher.  createOrUpdate(...)  was using a more expensive method to test for existing of the object in the database beforehand. But I suspect this is going to be a minimal speed improvement.
If I create 100 new rows then the speed is even slower.
By default Sqlite is in auto-commit mode. One thing to try is to wrap your inserts (or your  createOrUpdate s) using the the  ORMLite   Dao.callBatchTasks(...)  method.
In by  BulkInsertsTest android unit test , the following  doInserts(...)  method inserts 1000 items. When I just call it:
doInserts(dao);

It takes 7.3 seconds in my emulator. If I call using the  callBatchTasks(...)  method which wraps a transactions around the call in Android Sqlite:
dao.callBatchTasks(new Callable<Void>() { public Void call() throws Exception { doInserts(dao); return null; } });

It takes 1.6 seconds. The same performance can be had by using the  dao.setSavePoint(...) method. This starts a transaction but is not as good as the  callBachTasks(...)  method because you have to make sure you close your own transaction:
DatabaseConnection conn = dao.startThreadConnection(); Savepoint savePoint = null; try { savePoint = conn.setSavePoint(null); doInserts(dao); } finally { // commit at the end conn.commit(savePoint); dao.endThreadConnection(conn); }

This also takes ~1.7 seconds.
 
 dao.setsavePoint 에서 업 무 를 시작 하지만callBachTasks(...)방법 보다 못 합 니 다.자신의 업 무 를 닫 아야 하기 때 문 입 니 다.

좋은 웹페이지 즐겨찾기