마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

List 성능 질문입니다.

0 추천
SurfaceView 화면에 오브젝트를 그리기 위해서 ArrayList를 사용하고 있습니다.

오브젝트는 반짝거리는 별인데요.

스레드를 돌면서 해당 SurfaceView 내부의 ArrayList에 새로 그릴 별을 추가합니다.

별마다 지속 시간이 다르며 별의 지속 시간이 끝나면 boolean 값으로 end를 찍습니다.

별을 그릴 때 해당 별이 end인지 확인하여, 다른 ArrayList에 값을 넘겨주고,

end된 별만을 모아둔 ArrayList에서 값을 참조해 그릴 별을 모아둔 ArrayList에서 삭제 처리합니다.

 

이런 구조인데...

어플의 성능을 테스트 해보니... 열심히 돌아가는 화면 보다도,

저 별들을 그리는 과정에서 ArrayList 내부 개체를 삭제하는데

가장 많은 시간이 들었다는 것을 확인할 수 있었습니다.

테스트 프로그램에서 가장 연산이 많은 부분이 ArrayList.remove() 메소드라고 떡하니 뜨더라구요...

 

문제는 별을 그리는 스레드와 별을 추가해 주는 스레드가 서로 달라

참조 중에 추가가 일어날 수 있어서 LinkedList의 활용이 불가능 하다는 점입니다.

어떻게 하면 별의 List에서 지속시간이 종료된 별 객체를 빠르게 삭제할 수 있을까요...?
Jinthree (8,980 포인트) 님이 2014년 7월 4일 질문

1개의 답변

0 추천
 
채택된 답변
별을 add/remove 하지 말고 별에 end인지 아닌지 판단하는 메소드를 추가하여 해결하세요.
익명사용자 님이 2014년 7월 5일 답변
Jinthree님이 2014년 7월 5일 채택됨
사용될 별의 최대값을 정해서 돌려쓰라는 말씀이시군요.
그 방법이 나을 듯 합니다. 감사합니다.
...