WonHada.com으로 이전

객체 풀[Object pool]을 이용해 보자. 본문

플래시/플렉스[Flash/Flex]

객체 풀[Object pool]을 이용해 보자.

반주부 2008. 7. 2. 15:38
반응형


http://lab.polygonal.de/2008/06/18/using-object-pools/

위 사이트의 객체 풀 소스를 다운받아서 사용해 보았다..사이트에는 다른 쓸만한 라이브러리가 많다..motor2, ds가 유명하니 다들 아실 듯..

객체 풀을 사용하려면 풀[pool]의 개념을 먼저 알아야겠다..
일반적으로 객체를 생성하는 경우 new 를 사용하고, 제거하는 경우는 참조를 없앤 후 가비지 컬렉터에게 맡긴다..이러한 작업을 반복적으로 하다보면 전체적으로 퍼포먼스가 떨어지게 되는데 이는 객체를 생성하는 단계에서 많은 리소스(일반적으로 비용이 비싸다..라고 말한다..)를 잡아먹기 때문이다..

이를 보완하기 위한 방법이 풀이다..
수영장에서 튜브를 빌린다고 가정하자..

<풀을 사용하지 않는 대여점>
튜브 대여점에 튜브를 요청한다 -> 판매원이 튜브에 바람을 넣는다 -> 튜브를 가지고 논다 -> 튜브를 버린다 -> 다음에 요청이 들어오면 다시 튜브에 바람을 넣는다

<풀을 사용하는 대여점>
튜브 100개에 바람을 넣어 놓는다 -> 튜브 요청이 들어온다 -> 튜브를 준다 -> 튜브를 가지고 논다 -> 튜브를 대여점에 반환한다 -> 튜브 요청이 많이 들어온다 -> 부족한 갯수만큼 튜브에 바람을 더 넣는다 -> 그걸 계속 이용한다

두 대여점 중 어느 대여점이 더 빨리 일을 처리할까..(튜브를 오래동안 가지고 놀거나 집으로 가져간다면 둘 다 비슷한 결과가 나오겠네요..^^)

이변이 없는 한 당연히 풀을 사용하면 더 빨리 일을 처리할 수 있다..객체를 계속해서 생성하지 않고 기존에 만들어 진 객체를 이용하기 때문이다..
실제로 그런지 한번 테스트를 해보자..

[Flash] http://airdev.tistory.com/attachment/hk5.swf



[Flash] http://airdev.tistory.com/attachment/ik9.swf


결과) 메모리 - 6,041,600, 생성 시간 - 124

[Flash] http://airdev.tistory.com/attachment/ik10.swf


결과) 메모리 - 6,057,984, 생성 시간 - 67

메모리의 경우는 AS의 System.totalMemory를 이용했으며, pool이 더 적게 먹는 경우도 있었다..Sprite를 생성할 때 였던거 같다..궁금하신 분들은 테스트^^

생성 시간은 현재 절반 정도인데 어떤 경우엔 10배 정도 차이가 났다..당연히 풀이 빠르다..

사용법도 간단하고 성능도 우수하니 많이들 사용하시길.. : )

** 참고로, 풀에 반환할 때 화면에 보여지는 것들은 삭제되어 화면에 보이지 않는다..







반응형