ここで説明するにはアプリケーションが大きすぎますが、クライアントがいつでも使用できるモジュールが20個以上あることがわかります。そして、画面の後に画面を読み込むと、私のアプリケーションは500MB以上のオーキュートになります。Flex ModuleLoaderコンポーネントがメモリリークを引き起こします。モジュールを正しくアンロードするにはどうしたらいいですか?
私はモジュールをロードし、アンロードするために使用するスクリプトは次のとおりです。
public function createModule(modulo:String):void {
if(moduleLoader != null){
moduleLoader.unloadModule();
//moduleLoader.url = null;
moduleLoader.url = "com/oss/facturable/components/" + modulo + "?version=" + model.configXML.versionApp;
moduleLoader.loadModule();
}
}
private function errorHandler(e:ModuleEvent):void {
Alert.show("No se ha podido cargar el modulo. Contacte al departamento técnico.");
}
モジュールがロードされているコンテナ:私はメニューをクリックしたときに
<s:BorderContainer width="98%" height="98%" includeIn="mainState" styleName="bcModuleLoader" top="100">
<s:layout>
<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10"/>
</s:layout>
<s:Scroller width="100%" height="100%">
<s:Group>
<mx:ModuleLoader id="moduleLoader" error="errorHandler(event)" width="100%" height="100%" horizontalAlign="center" verticalAlign="top" creationComplete="createModule('bandejaEntrada.swf')"/>
</s:Group>
</s:Scroller>
</s:BorderContainer>
がcreateModule関数が呼び出されます私がここに投稿するのは無関係だと思うオプションです。私は今、これを動作させてリークさせるためにすべて持っているものです:S
これは公式のunloadModule関数です。私はこれを見て、私は、見て!すべてのeventListenersオブジェクトとchildオブジェクトを削除します。どうやって私の記憶は元のままになっていて、新しいモジュールを開いたときにその上にさらに多くのメモリがロードされますか?ああ!
public function unloadModule():void
{
if (child)
{
removeChild(child);
child = null;
}
if (module)
{
module.removeEventListener(ModuleEvent.PROGRESS,
moduleProgressHandler);
module.removeEventListener(ModuleEvent.SETUP, moduleSetupHandler);
module.removeEventListener(ModuleEvent.READY, moduleReadyHandler);
module.removeEventListener(ModuleEvent.ERROR, moduleErrorHandler);
module.unload();
module.removeEventListener(ModuleEvent.UNLOAD, moduleUnloadHandler);
module = null;
}
}
各モジュールの子コンポーネントも 'eventListeners'を削除していることを確認してください。私はこれらのモジュールのどれも 'HierarchicalData'で' AdvancedDataGrids'を持っているとは思わないでしょうか? –
はい、それらはすべて高度なデータグリッドを持っています。いくつかのモジュールにもポップアップが漏れていますが、別のモジュールをナビゲートするときにデータを漏らすためにアプリケーションを開く必要はありません。 – overmann
これらのAdvancedDataGridは 'HierarchicalData'を使用していますか?私は私の 'AdvancedDataGrids'がメモリリークを引き起こしていた同様の問題に遭遇しました。 –