안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요..
지금 sns 앱을 하나 만들고 있습니다.
서버와 통신해서 가져온 데이터를 저장하고 출력하고 업데이트 하는 뭐 그런 앱인데..
모토로이와 갤럭시S 의 엄청난 퍼포먼스 차이에 좌절중입니다.
고작 100건을 DB 에 insert 하는데 10초가 넘게 걸립니다.
모토로이는 2초가 채 안걸리고요.
바꿔 말하면 100건의 리스트를 출력하는데 갤럭시S는 10초정도가 걸린다는 얘깁니다.
이것저것 테스트 해보니 sqlite 에 insert 하는데서 오래 걸리더군요.
log 로 찍어보면 모토로이는 휙~ 하고 지나가는데 갤럭시S는 1, 2, 3, 4.. 뭐 이렇게 천천히 걸어가는것 같습니다.
뭔가 방법이 없을까요?
서버에서 데이터를 가져오면 먼저 로컬 DB 에 저장하고 그뒤에 출력하는 로직이 일반적인데, 너무 느리다보니 먼저 출력하고 나서 로컬 DB 에 입력하는 걸로 수정해볼까 생각도 하고 있습니다. 이렇게들 사용하는지는 몰라도.
다른분들은 어떻게 해결하셨나요?
휴..
ps. 물론 스레드로 처리하고는 있습니다만.. 뭐 여전하네요..
지금 sns 앱을 하나 만들고 있습니다.
서버와 통신해서 가져온 데이터를 저장하고 출력하고 업데이트 하는 뭐 그런 앱인데..
모토로이와 갤럭시S 의 엄청난 퍼포먼스 차이에 좌절중입니다.
고작 100건을 DB 에 insert 하는데 10초가 넘게 걸립니다.
모토로이는 2초가 채 안걸리고요.
바꿔 말하면 100건의 리스트를 출력하는데 갤럭시S는 10초정도가 걸린다는 얘깁니다.
이것저것 테스트 해보니 sqlite 에 insert 하는데서 오래 걸리더군요.
log 로 찍어보면 모토로이는 휙~ 하고 지나가는데 갤럭시S는 1, 2, 3, 4.. 뭐 이렇게 천천히 걸어가는것 같습니다.
뭔가 방법이 없을까요?
서버에서 데이터를 가져오면 먼저 로컬 DB 에 저장하고 그뒤에 출력하는 로직이 일반적인데, 너무 느리다보니 먼저 출력하고 나서 로컬 DB 에 입력하는 걸로 수정해볼까 생각도 하고 있습니다. 이렇게들 사용하는지는 몰라도.
다른분들은 어떻게 해결하셨나요?
휴..
ps. 물론 스레드로 처리하고는 있습니다만.. 뭐 여전하네요..
2010.11.16 16:05:03
일단 DB Open과 Close가 상당히 많이 퍼포먼스를 잡아먹는것으로 추정됩니다.
따라서 되도록 Open/Close를 적게 할수 있도록 설계해야 할겁니다.
서비스로 관리하는것도 생각해볼만 합니다. 서비스 시작시 Open하고 서비스 종료시 Close하는 방식...
만약 쿼리가 필요하면 Open된 상태에서 쿼리만 날리면 되구요..
실제로 한번의 Open / Close 사이에 10개 Insert하는거와
매번 Insert할때 Open/Close하는것은 차이가 납니다.
따라서 되도록 Open/Close를 적게 할수 있도록 설계해야 할겁니다.
서비스로 관리하는것도 생각해볼만 합니다. 서비스 시작시 Open하고 서비스 종료시 Close하는 방식...
만약 쿼리가 필요하면 Open된 상태에서 쿼리만 날리면 되구요..
실제로 한번의 Open / Close 사이에 10개 Insert하는거와
매번 Insert할때 Open/Close하는것은 차이가 납니다.
2010.11.16 16:46:07
DB를 Open 하고 있어도 다른 어플들이 DB를 사용하면 같이 속도가 저하됩니다.
특히 계정 sync 상황에서는 더더욱 그렇고요.
답 없습니다.
고민하신대로,
Transaction 거시고 (이때도 버퍼를 이용하셔서 한번에 많이 들어가도록 설계하셔야 합니다.)
버퍼 사용하셔서 최대한 메모리에 올리신채로 (이때도 out of memory 안나오도록)
먼저 화면에 보여 주시고 백그라운드에서 DB insert 하셔야 합니다.
DB는 최대한 Join 형태를 피해주시구요.
갤럭시 S로 테스트하면 이런 문제가 한두가지가 아닐꺼예요
ㅡ.ㅜ



