반응형
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 어도비
- Microsoft
- Flex
- 실버라이트
- 플렉스
- 워렌 버핏
- Genome2D
- 3.0
- 도서
- Air
- 3D
- 마이크로소프트
- Papervision3D
- adobe
- Silverlight
- 물리엔진
- 아폴로케이션
- ActionScript
- starling
- framework
- 주식
- Papervision
- Flash
- 액션스크립트
- XAML
- 책
- API
- stage3d
- 플래시
- 아폴로
Archives
- Today
- Total
WonHada.com으로 이전
객체 풀[Object pool]을 이용해 보자. 본문
반응형
http://lab.polygonal.de/2008/06/18/using-object-pools/
위 사이트의 객체 풀 소스를 다운받아서 사용해 보았다..사이트에는 다른 쓸만한 라이브러리가 많다..motor2, ds가 유명하니 다들 아실 듯..
객체 풀을 사용하려면 풀[pool]의 개념을 먼저 알아야겠다..
일반적으로 객체를 생성하는 경우 new 를 사용하고, 제거하는 경우는 참조를 없앤 후 가비지 컬렉터에게 맡긴다..이러한 작업을 반복적으로 하다보면 전체적으로 퍼포먼스가 떨어지게 되는데 이는 객체를 생성하는 단계에서 많은 리소스(일반적으로 비용이 비싸다..라고 말한다..)를 잡아먹기 때문이다..
이를 보완하기 위한 방법이 풀이다..
수영장에서 튜브를 빌린다고 가정하자..
<풀을 사용하지 않는 대여점>
튜브 대여점에 튜브를 요청한다 -> 판매원이 튜브에 바람을 넣는다 -> 튜브를 가지고 논다 -> 튜브를 버린다 -> 다음에 요청이 들어오면 다시 튜브에 바람을 넣는다
<풀을 사용하는 대여점>
튜브 100개에 바람을 넣어 놓는다 -> 튜브 요청이 들어온다 -> 튜브를 준다 -> 튜브를 가지고 논다 -> 튜브를 대여점에 반환한다 -> 튜브 요청이 많이 들어온다 -> 부족한 갯수만큼 튜브에 바람을 더 넣는다 -> 그걸 계속 이용한다
두 대여점 중 어느 대여점이 더 빨리 일을 처리할까..(튜브를 오래동안 가지고 놀거나 집으로 가져간다면 둘 다 비슷한 결과가 나오겠네요..^^)
이변이 없는 한 당연히 풀을 사용하면 더 빨리 일을 처리할 수 있다..객체를 계속해서 생성하지 않고 기존에 만들어 진 객체를 이용하기 때문이다..
실제로 그런지 한번 테스트를 해보자..
결과) 메모리 - 6,041,600, 생성 시간 - 124
결과) 메모리 - 6,057,984, 생성 시간 - 67
메모리의 경우는 AS의 System.totalMemory를 이용했으며, pool이 더 적게 먹는 경우도 있었다..Sprite를 생성할 때 였던거 같다..궁금하신 분들은 테스트^^
생성 시간은 현재 절반 정도인데 어떤 경우엔 10배 정도 차이가 났다..당연히 풀이 빠르다..
사용법도 간단하고 성능도 우수하니 많이들 사용하시길.. : )
** 참고로, 풀에 반환할 때 화면에 보여지는 것들은 삭제되어 화면에 보이지 않는다..
반응형