2013-03-18 3 views
0

빠른 성능 질문이 있습니다. 목록보기를 채우는 ListView 어댑터가 있고 내 sqlite 데이터베이스를 열고보기를 채우는 끝에 닫고 SQLite 데이터베이스의 목록 행에 대한 정보를 채 웁니다. 나는 스크롤링이 의미가있을 때 이것을 중심으로 심각한 성능에 주목했다. 스크롤 성능을 향상시킬 수있는 방법이 궁금합니다. 데이터베이스에 대해 약 3 번 쿼리합니다. SQLite 쿼리의 목록보기 어댑터

Database db = new Database(context); 
db.open(); 
viewHolder.first.setText(db.queryFirst()); 
viewHolder.second.setText(db.querySecond()); 
viewHolder.third.setText(db.queryThird()); 
db.close(); 

나는 인스턴스 변수로 DB에 대한 참조를 유지하고 열어 내가 쿼리 할 때 닫거나 나는 이것에 대해 어떻게 가야할까요?

+0

나는 보통 onCreate에서 db를 열고 onDestroy에서 닫습니다. –

+0

DB에 대한 액세스 권한이 필요한 일부 서비스를 실행하면서 가능한 동시성 문제가 발생할 수 있습니다. –

+0

서비스가 db에 기록 되었습니까? –

답변

2

스크롤 성능을 어떻게 향상시킬 수 있는지 궁금합니다. 데이터베이스에 대해 약 3 번 쿼리합니다.

전체 어댑터에 대해 데이터베이스를 한 번 쿼리하는 것이 좋습니다. 현재 각 행에 대해 세 개의 쿼리를 보내고 그 중 아무 것도 캐시되지 않습니다. 드라이브에서 읽는 것은 느린 프로세스이므로 커서는 많은 양의 데이터를 매우 효율적으로 가져 오도록 설계되었으며 CursorAdapters는 가능한 최소한의 리소스를 사용하도록 설계되었습니다. 하나의 Cursor와 CursorAdapter를 사용하면 사용자가 성능 손실을 눈치 채지 않고 스크롤 할 수 있습니다.

+0

당신이 맞습니다 지금 내 쿼리를 일괄 처리하고로드 지연이 사라졌습니다. 나는 한 걸음 물러서서 전반적인 논리를 고찰해야만했다. –

0

데이터베이스를 아주 쉽게 조작 할 수있는 라이브러리 인 ORMLite가 있으며 목록을 가져 오면 배열이 먼저로드되고 스크롤 성능 문제가 발생하지 않습니다. 데이터베이스의 지연로드 섹션과 함께이 기능을 사용하면 스크롤 성능을 원활하게 향상시킬 수 있습니다.

관련 문제