2012-07-21 1 views
1

최근에 Android 플랫폼에서 완전히 자바로 작성된 게임을 게시 한 적이 있습니다. 현재 가능한 한 많은 성능을 얻으려고합니다. 제 게임의 경우 문제가 더 자주 사용하는 것 같습니다. ArrayList 컨테이너는 Map이 더 적합 할 수 있습니다. 내가 자신의 설명을하기 위해 장면 뒤에서 발생하는 동적 메모리 할당 (Android의 구조체 Map/Tree)을 두려워했기 때문에 설명했습니다. 어쩌면 내가 알지 못하는 Android/Java 플랫폼에 구조의 일종이 있는데, 빠른 검색 결과를 제공하고 새로운 요소를 추가 할 때 동적으로 추가 메모리를 할당하지 않을 것입니다.Android의지도 구조 및 동적 메모리 할당

업데이트 : 예를 들어, 대부분의 게임 입자를 유지하기 위해 ArrayList 구조를 사용하고 있습니다. 물론 이들을 독립적으로 (순차적으로가 아니라) 제거하는 것은 시스템이 하나의 엔티티 객체를 제거하기 위해 전체 컨테이너를 반복해야하기 때문에 (물론 최악의 시나리오에서) 당황 스럽다.

+0

지도를 잘못 사용한다고 생각하는 부분에 대한 몇 가지 예를 제시하십시오. 생각하는 위치/방식을 최적화 할 필요가 없습니다. 귀하의 코드를 프로파일 링 했습니까? – you786

+0

프로파일 링을했는데 그것이 내가 묻는 이유입니다. – cplusogl

+1

인터넷에서 "엉덩이"라고 말할 수 있습니다. – Falmarri

답변

0

요소 개체를 미리 할당하고 새 개체를 할당하는 대신 빈을 다시 사용하고 있습니까?

+0

예 일종의 풀링 패턴을 사용하고 있습니다 – cplusogl

1

특별히 문제가되지 않는 한 메모리 할당 때문에 속도가 저하 될 염려가 없습니다. 메모리 할당은 안드로이드 게임의 속도 저하의 원인이 아닙니다. GC가 일반적으로 문제가되는 시점입니다. 맵에서 자주 삽입 및 삭제하지 않는 한 할당에 대해 걱정할 필요가 없습니다.

업데이트 :

가 대신지도를 사용하여, 당신은 당신이 더 이상 필요하지 않을 때 "죽은"등의 입자를 표시하고 업데이트 반복에서 그들을 건너가 플래그를 사용하여 고려할 수 있습니다

. 죽은 입자에 대한 참조를 새로운 deadParticles ArrayList에 저장하고 새로운 deadParticles ArrayList를 필요로 할 때 그 목록에서 하나를 꺼냅니다. 그렇게하면 입자가 필요할 때 즉시 입자에 액세스 할 수 있습니다.

+0

방금 ​​업데이트 섹션에 쓴 것처럼 입자가 고통을 겪을 수 있습니다 ... 그리고 매우 자주 삽입/제거됩니다 :/ – cplusogl

+0

다음과 같이 다시 생각해야합니다. 이 솔루션이 내가 찾으려고하는 것이 확실하지 않습니다. 아직도 .. 내가 내부 일을위한 내부 풀링 메커니즘의 일종을 가지고있는 일종의 Map/Tree 컨테이너를 선호 할 것이다 (Map/Tree가 더 적합 할 때 많이 쓴 코드에서). 동적 할당 : / – cplusogl