Android에서 ormlite 4.35를 사용하여 객체 및 객체 세트를로드 중입니다. 아래의 getAllCragsWithLocation()
메서드에서 타이밍을 위해 16에서 19 초 사이 (에뮬레이터에서) 소요됩니다.Android에서 ORMLite로 개체를로드하는 방법을 개선하려면 어떻게해야합니까?
데이터베이스에 590 개의 Crag가 있고 40 곳에 위치가 없습니다.
여러 라인이
03-19 11:03:54.441: I/dalvikvm(1156): Jit: resizing JitTable from 1024 to 2048
03-19 11:03:55.531: D/dalvikvm(1156): GC_CONCURRENT freed 544K, 37% free 5174K/8199K, external 731K/1109K, paused 6ms+11ms
나는 개체를 다른 방법을로드해야 하는가 등의 기록이있다? sqlite3를 명령 줄에서 쿼리를 실행하면
public List<Crag> getAllCragsWithLocation() {
Log.i(TAG,"beginning db calls");
long startQuery = System.currentTimeMillis();
QueryBuilder<Crag,Integer> queryBuilder = helper.getCragDao().queryBuilder();
List<Crag> results = new ArrayList<Crag>();
try {
queryBuilder.where().isNotNull("location_id");
Log.i(TAG,queryBuilder.prepareStatementString());
PreparedQuery<Crag> preparedQuery = queryBuilder.prepare();
results = helper.getCragDao().query(preparedQuery);
} catch (android.database.SQLException e) {
Log.e(TAG,e.toString());
} catch (SQLException e) {
Log.e(TAG,e.toString());
}
Log.i(TAG,"ending query after "+((System.currentTimeMillis()-startQuery)/1000)+" seconds");
return results;
}
울퉁불퉁 한 바위 개체 (간체)입니다 ... 초 100의 주위에 취
@DatabaseTable
public class Crag {
public Crag() {
//ormlite requires a no-arg constructor?
guidebooks = new ArrayList<Guidebook>();
}
@DatabaseField(id=true) private int id;
@ForeignCollectionField(eager = true)
private Collection<Guidebook> guidebooks;
@DatabaseField(foreign=true, foreignAutoRefresh = true, index=true)
private uk.co.bmc.rad.models.Location location;
@DatabaseField(foreign=true,foreignAutoRefresh=true)
private SubRegion subRegion;
}
이물질이 바위보다 훨씬 간단한 클래스입니다. 표시 목적을 위해서만 객체가 데이터베이스에서로드되는 지점에 위치가 필요하지만 평등을 비교할 때 이물을 사용하므로 ...
에서 반환은 추가 준비를 위해 반복됩니다. MapOverlay
. 프로세스 타이밍은 1 초도 채 걸리지 않습니다.
UPDATE : 난 그냥 비교 db4o는에서 교환했고 나는 그와 함께 갈 것 같아요 그래서 비교에 의해 본질적으로 즉시 모든 울퉁불퉁 한 바위를로드합니다.
업데이트] UPDATE : 대신 빠르게 db4o는 스와핑 나는 두 가지를 비교하는 더 많은 시간을 보냈어요.
JUnit 3 AndroidTestCase에서 하나의 레코드를 데이터베이스에 삽입 한 다음 ORMLite와 DB4O가 객체를 삽입하고 반환하는 데 약 2 초가 걸리는 경우 직접 쿼리하십시오.
DB40는 칠초 소요) 내가 590 개체를 삽입 내 프로세스를 실행하는 경우 ORMLite 주위 24초 소요 내가 getAllCragsWithLocation() 다음 getAllCrags을 (호출하는 경우 DB40은 삽입 직후 약 40
소요 Crags 목록을 반환하는 데 0 초가 걸리므로 두 번째 쿼리의 속도를 높이는 캐시가 있다고 생각합니다.
ORMLite는 두 쿼리 모두 약 7 초가 걸립니다.
그래서 실제로 아주 작은있다
업데이트]
업데이트] UPDATE : 오늘 트랜스포머 프라임을 잡고 에뮬레이터에 7에 비해 불과 1 초로드가에있는 응용 프로그램과 울퉁불퉁 한 바위를 실행 .
나는 orkite의 쿼리 구문을 이미 익숙하게 했으므로; 원시 SQL에서 다시 떨어질 수 있고 sqlite 테이블 구조가 더 이동 가능합니다. db4o를 통해 ormlite를 고수 할 것입니다.
ContentProvider를 다루기가 힘들어서 ormlite를 테스트하고 있습니다. 끔찍한 마법의 끈이 많은 것 같았습니다. 하지만 당신은 바로 테스트를위한 단순화 된 모델을 가지고 있으며, ContentProvider는 더 나은 성능을 가지고 있습니다. 5 개의 클래스가 포함 된 객체 그래프가있는 Crag 객체를 처리하기 위해 ContentProvider를 확장하면서 ContentProvider를 사용하여이를 구현하는 방법에 대해 혼란스러워했습니다. ormlite를 통해 객체를 추가하는 것이 더 간단한 유지 관리자가 될 수 있기를 바랬습니다 –
android.database.sqlite 패키지 (SQLiteDatabase 및 SQLiteOpenHelper)의 클래스를 사용하여 고유 한 데이터베이스 계층을 만들 수 있습니다. 유지 보수성과 성능면에서 더 좋을 수 있습니다. –
사실이지만 일부 설명이있는 ORM으로 개발하는 데 익숙하며 여기에서 활용하는 것을 선호합니다. –