플래시 앱에서 메모리 관리에 문제가 있습니다. 메모리 사용량은 상당히 증가하고 자산을로드하는 방식까지 추적했습니다.플래시/플렉스/AS3에서의 메모리 사용
내가 그때 인스턴스 자산이 방법이 시점에서
var pClass : Class = Embedded[sResource] as Class;
return new pClass() as Bitmap;
을이
[Embed(source="/home/gabriel/text_hard.jpg")]
public static var ASSET_text_hard_DOT_jpg : Class;
같은 내장 클래스에 여러 래스터 이미지를 포함, 메모리 사용량은 완벽하게 정상이다, 상승 . 그러나 null
개체에 대한 모든 참조를 메모리를 해제하지 않습니다.
플래시 플레이어가 처음 요청할 때 플래시 플레이어가 클래스의 인스턴스를 만드는 것처럼 보이지만 절대로 릴리스하지 않습니다. 참조없이 System.gc()를 호출하고 Double LocalConnection 트릭을 수행합니다. 또는 BitmapData 객체에서 dispose()를 호출해야합니다.
물론 이것은 매우 바람직하지 않습니다. 오래 전에 자산을 일부 사용하지 않았는지 여부에 관계없이 SWF의 모든 것이 인스턴스화 될 때까지 메모리 사용량이 늘어날 것입니다.
내 분석이 맞습니까? 이 문제를 해결하기 위해 무엇인가 할 수 있습니까?
죄송합니다. 따라 가기가 어렵습니다. 나는 그것을하는 한 가지 방법만을 설명했다. 첫 번째 스 니펫은 애셋을 포함하는 방법과 내가 인스턴스화하는 방법을 보여줍니다. 왜 그냥'새로운 ASSET_text_hard_DOT_jpg()'를하지 않는 것입니까? 그 이유는 내 코드가 복잡하기 때문에 미리 필요한 부분을 미리 알 필요가 없기 때문입니다. 예를 들어 여러 조각으로 된 문자열을 만들어 이름이 지정된 이미지 (예 : "text_"+ s_lDifficulty [nDifficulty] -> "text_hard")를 얻습니다. – ggambett
미안하지만 당신이 성취하려고하는 것은 불가능하다고 생각합니다. swf가 빌드 될 때 리소스가 임베디드 된 것을 알기 때문에 설명한대로 리소스를 동적으로 포함 할 수 있는지 확신하지 못합니다. 사전을 만들고 필요한 모든 리소스를 배치하려면 어떻게해야합니까? 나는 그것을 응답에서 지금 작성한 UPDATE1 코드와 같이 사용할 것입니다. –