[AS3] Loader 를 사용시 메모리 관리방법에 대해서

2009. 2. 6. 14:40AS3


loader 를 사용해서 이미지 불러오는건 많이 해보셨을꺼라고 생각합니다 ~ ..

 loader 를 사용해서 이미지를 불러오게 되면 안보이지만 이넘은 Bitmap 에 담아서 보여주게 되어있을것입니다 ~..

 ( 아 ~ 뭐지 ? 이 자신감 없는 말투 .. ㅠㅠ )

 또한 기본적으로 불러오게 되면  이미지의 용량의 * 3 ~ 4배의 시스템 메모리를 사용한다고 합니다

 한마디로 100kb 짜리를 불러오게 되면 3~400kb 의 메모리를 사용한다는 뜻인데 ..

 테스트 해본적은 없습니다 ~ ..

 ( 사실 전 flash 에 있는 memory 메소드를 사용해서 체크하기 때문에 ㅠㅠ 다른것 못믿겠어요 ㅠㅠ )

 따라서 그 안에 있는 Bitmap를 삭제 해주면 좀더 메모리가 낮아진걸 확인해본적이 있습니다 .. 흠흠 ..

 다만 작은 이미지는 크게 상관이 없지만 큰 이미지 같은 경우 아주 효과를 약간 봅니다 ~ 어헙 ~ ㅋㅋ

제가 요즘 열심히 활동하는 PFG 의 Hika 님이 제 궁금증을 다 풀어주셨습니다 ~ ㅋㅋ

흔히 우리가 사용하는 loader 가 GC 와 친해지게 하는 방법 2가지에 대해서 왜 작동 안하는지에 대해서

궁금증을 풀어주겠습니다 ~ ㅋ

-- 점선 부분은 PFG 의 Hika 님이 답변해주신 내용입니다 --

 1. loader.unload()

 =  항상 환상을 가지면 안되시는 부분이 GC입니다. GC는 로컬 어플이거나 AIR어플인 경우 또한 샌드박스가 로컬인 경우에는 실시간으로 일어납니다. 하지만 웹에서 사용할때는 언제 일어날지 모릅니다(어도비의 공식답변) 일반적으로 메모리가 꽉차면 일어난다고 알려져있습니다 =.=;

 2. loader = null

 = Loader는 기본적으로 컨테이너입니다. 따라서 당연히 컨테이너분량만큼 더 차지하게 됩니다. 또한 Loader는 내부에 URLStream과 content라는 자식객체까지 기본으로 내장하고 있고 바이트어레이로부터 비트맵데이터로 변환하는 컨버터도 갖고 있습니다. 무거울 수밖에 없겠죠 ^^; 웹에서 가장 확실하게 메모리에서 제거하는 방법은 Dictionary에 담았다가 delete 시키는 수가 있습니다. 대부분의 트위너가 이걸 응용합니다. dispose는 모든 bitmapData를 날려버리는데 유용합니다 ^^ 

음 여기서 나온 " Dictionary " 란 ?? 음 ... 저도 궁금합니다 ~ ㅋㅋㅋ 다음에 열라 공부해서 포스팅하겠습니다 ㅋㅋ


 실질적으로 이 2가지 방법을 많이 대중적으로 사용하시는걸로 알고 있습니다

 그러나 loader.content 에 BitmapData 를 가지고 있는걸 Dispose 하면 좀더 메모리 효율이 좋아진다라는

 머리 약간벗거진 아저씨의 말을 듣고 한번 해본결과 정말이더군요 +_+


이런식으로 따로 함수를 한개 만들어놓구 사용시 지워주면서 하면 좀더 좋겠죠 ? ..

아 저기 있는 productLoader 가 Loader 입니다 ~ .. ^_^ 참고 바랍니다

저도 GC 나 메모리에 대해서 조금씩 공부하는 과정입니다 ~ .. 허접해도 양해 바랍니다 ~