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 |
Tags
- 집합의 연산
- flash cs3
- 강좌
- flash player 10
- Chart
- MMOKit
- scaleform4
- 스케일폼
- ApplicationDomain
- as3
- addChild
- 수학정석
- 애드온
- KGC 2013
- GDC
- flash
- watch
- DataBinding
- autodesk
- Document Class
- scaleform3
- as3.0
- 플래시
- 형변환
- 클릭
- scaleform
- CLIK
- 태그클라우드
- as2
- 샌프란시스코
Archives
- Today
- Total
scaleform.minarto.com
Object Pooling in as2 본문
전에 올렸던 포스팅 중에 외부 라이브러리에 관한 글이 있었습니다.
거기서 테스트 했던 라이브러리 중 polygonal labs 에서 만든 ObjectPool 이 있었습니다.
객체 풀링에 관한 글은 다음의 글들을 한번씩 보시기 바랍니다
http://help.adobe.com/ko_KR/as3/mobile/WS948100b6829bd5a6-19cd3c2412513c24bce-8000.html
http://www.diebuster.com/flash/6
http://blog.jidolstar.com/666
단점이 아예 없는 것은 아니지만 메모리 풀링은 거의 무조건 쓰는게 좋습니다. 저도 as3 작업을 할 때는 위에서 언급한 ObjectPool 을 씁니다. (직접 만들긴 귀찮잖아요)
자, 그런데 스케일폼은 아직 많은 곳에서 as2로도 작업을 해야합니다. 하지만 as3 에서는 많이 쓰지만 as2에서는 잘 쓰질 않더군요...
그럼 as2용 ObjectPool 클래스를 만들어 볼까요?
allocate 함수부터 만들어보겠습니다. allocate 함수는 ObjectPool 클래스를 초기화하고 풀을 생성하는 역할을 합니다.
_dic = [];
function allocate($size:Number, $constructor:Function):Void {
for (i= 0; i < $size; i++ ) {
_dic.push(new $constructor);
}
}
}
as3에서는 두번째 인자로 class 형을 받지만 as2에서는 class 형이 없습니다...
하지만 클래스를 만들었다면 그 안에 생성자 함수가 있기 마련입니다. 클래스로 인한 객체 생성이란 것이 결국 new 연산자 다음에 생성자 함수를 실행하는 겁니다.
그러니 class 는 없지만 위와 같이 만들면 됩니다.
그럼 이번엔 객체를 가져오는 get 함수입니다.
function get object() {
return _dic.pop();
}
간단하죠???
다 쓴 객체를 반환하는 return 함수가 있어야겠죠?
function return object($obj):Void {
_dic.push($obj);
}
이렇게 간단할 수가!!!! 다 만들었습니다.
물론 제대로 만들려면 손볼 곳이 꽤 많지만, 지금으로도 훌륭한 풀링 클래스가 만들어졌습니다.
제가 MovieclipLoader 클래스를 십만개 만들어 돌려본 결과,
풀링을 사용한 쪽이 750 ms, new 로 생성한 쪽이 1150 ms 가 나오네요...
너무 간단한 코드기 때문에 더이상 뭐 딱히 설명할 것도 없네요. :^) 요점은 이겁니다.
as2 로도 메모리 풀링을 사용할 수 있다!!!
우리 모두 new 연산자 없는 코딩을 해보아요~~~
p.s.
리터럴로 생성할 수 있는 객체는 리터럴로 생성하는 것이 대부분 빠릅니다.
물론 메모리 관리의 잇점 때문에도 풀링을 쓰지만, 속도가 느리다면 그 의미가 많이 퇴색되겠죠?
예를 들어 Array, Object 같은 경우는 리터럴로 생성하는게 빠릅니다.