2011-10-18 3 views
0

비트 맵 데이터, bytearrays 및 base64 문자열을 많이 사용하는 Flash CS5로 Adobe AIR 데스크톱 응용 프로그램을 구축하고 있습니다. 잠시 후 앱의 메모리 사용량이 두 배로 증가합니다.가비지 수집 및 system.gc()

system.gc()을 사용하여 메모리를 확보하는 것이 좋습니까, 아니면 그렇게 나쁜 습관입니까?

감사합니다.

답변

3

system.gc는 AIR 및 Flash Player의 디버그 전용 기능입니다. 더 나은 것은 gc를 피할 수 있다면 bitmapdata와 다른 객체를 재활용하는 것이고, 사용하지 않으면 bitmapdata.dispose() 및 bitmapdata = null을 호출하는 것이 아니라고 생각하는 것입니다.

프로젝트에서 여러 시간에 동일한 크기의 비트 맵 객체가있는 경우 동일한 BitmapData 인스턴스를 사용하여 해당 객체를 조작 할 수 있습니다. 이것은 ItemRenderers가 항목을 재활용하는 방법이나 iOS의 UITableViewController 같은 다른 플랫폼이 UITableViewCell을 재활용/재사용하는 방법과 유사합니다. 가비지 콜렉션은 만병 통치약이 아니며, 쉬운 프로그래밍 가능성이 성능보다 중요 할 때 사용해야합니다.

+0

** recyle ** bitmapdata 및 다른 객체가 의미하는 바를 조금 더 설명해 주실 수 있습니까? – Tom

+0

예를 들어 설치된 데스크톱 용 Adobe AIR 앱과 같이 디버그 만 가능한지 확실하지 않습니다. 시스템 설명서에서 : "또는 설치된 응용 프로그램에서" "Flash Player 디버거 버전 및 AIR 응용 프로그램 전용 AIR 응용 프로그램에서는 System.gc() 메서드가 AIR에서 실행되는 내용에서만 활성화됩니다 디버그 실행기 (ADL) 또는 설치된 응용 프로그램의 응용 프로그램 보안 샌드 박스에있는 내용을 확인하십시오. " – Aaron

1

system.gc은 플래시 런타임에 유휴주기에 자동으로 호출되므로 필요하지 않습니다. 직접 전화를 걸면 실제 이득이없는 응용 프로그램의 속도가 느려질 수 있습니다.

더 이상 BitmapData 또는 ByteArray가 필요하지 않으면 BitmapData.dispose() 또는 ByteArray.clear()으로 전화하십시오.