[akabana-user:201] Re: S2Flexのメモリリークについて

jun funakura [E-MAIL ADDRESS DELETED]
2008年 10月 25日 (土) 22:12:59 JST


有井さん

ふなくら(nod)です。

貼付けていただいたコードをベースに新規にいろいろ作成して
先週検証をしました。

Profilerで確認すると、ご指摘の通り、Unloadしてもライブオブジェクトで
インスタンスが残ってしまいますね。

確認したところ、
S2Flex2Service
NetConneciton
RelayResponder
RemoteMessage
RpcOperation
などが残っているようです。S2Flex2-Componentsのクラス群が
いっぱいありました。orz...

Serviceを呼び出した後に、EventListenerをremoveしたり
参照がなくなるように変数の参照をなくしたり
いろいろやって見ているのですが、解消できていません。

サービスを呼び出さなければUnloadしたときに消えるようですので
moduleのUnloadに対応するにはコンポーネントを作り替えないと
いけないかもしれません。時間がかかってしまいそうです。

インスタンスの参照が残っているとUnloadしてもメモリ上に
残ってしまうのでむずかしいところです。

現状では、module化する部分を再度検討するとか
module化しても、LoadはしてもUnloadしないとか
各パーツはコンポーネント化までにしておくなど
やや後ろ向きな対応ということになってしまうかもしれません。

中垣さんのblogエントリーなどをみても
Flex3になったときに内部構造を変更しているようですので
module対応する際には結構考慮する必要はあるようです。
http://shigeru-nakagaki.com/index.cfm?mode=entry&entry=5C3CB39F-3048-785E-311079E8AD1FC9FF&lang=ja_JP

以上、あまりどうすればいいか?の回答にはなってませんが
現状の報告まで。

--
ふなくら(nod)



2008/10/16 19:32 有井 貴志 <[E-MAIL ADDRESS DELETED]>:
> 有井です。
>
> ふなくらさん、ご回答有難うございます。
>
> メモリはお察しの通り、FlexBuilderのProfilerで確認しました。
> loadしてunloadした後にメモリのスナップショットを見て確認しています。
>
> 正しくUnloadされたものは
> ModuleにPanelを貼り付けて終わりという程度のもので、
> 特にEventListenerで処理しているものはありません。
>
> よろしくお願い致します。
>
> jun funakura さんは書きました:
>> ふなくら(nod)です。
>>
>> メールチェックを怠っていましたm(__)m
>> 下記現象確認いたしますので
>> 少しお待ちください。
>>
>> componentsを作成したのは、moduleが出てくる以前だったので
>> 確認していませんでした。
>>
>> モジュールについては、過去にLoad/Unloadで問題がでていたり
>> 過去のバージョンではメモリーリークが発生していたようです。
>>
>> たとえば以下のフォーラムなど。
>> http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=807&forum=2&post_id=3185
>>
>> またAddEventListenerをしているなどでオブジェクトの参照が残って
>> Unloadされない現象といったこともあるようです。
>>
>> メモリに残っているというのを確認したのは、
>> Profilerで確認したということでよろしいでしょうか。
>> 正しくUnloadされたものは、どんな形で試されたか、
>> EventListenerの処理をしているなど教えていただけますと
>> 助かります。
>>
>> 以上よろしくお願いいたします。
>>
>> --
>>
>>
>> 2008/10/14 20:34 有井 貴志 <[E-MAIL ADDRESS DELETED]>:
>>> お世話になります。有井と申します。
>>>
>>> S2Flexを用いたModuleをModuleLoaderでロード・アンロードすると
>>> 何故かメモリが残ったままになってしまいます。
>>> S2Flexを使用していないModuleではメモリ解放が確認できました。
>>>
>>> 自分のソースが悪いのかどうなのかも分からず困っております。
>>>
>>> お忙しい所、お手数お掛けしてしまい本当に申し訳ございませんが
>>> 何が問題なのかご教示頂けませんでしょうか?
>>>
>>> 環境
>>> ・flexSDK Flex 3.1
>>> ・s2flex2-components.swc
>>> ・s2-flex2-1.1.1-rc1
>>> ・s2-framework-2.4.29
>>> ・JDK6
>>> ・Tomcat5.0.28
>>>
>>> 以下ソースです
>>> -Main.mxml-----------------------------------------
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>>>    layout="vertical">
>>>
>>>    <mx:ApplicationControlBar width="100%">
>>>        <mx:Button label="load" click="load()"/>
>>>        <mx:Button label="unload" click="unload()"/>
>>>    </mx:ApplicationControlBar>
>>>
>>>    <mx:ModuleLoader id="mloader"
>>>        width="100%" height="100%"/>
>>>
>>>    <mx:Script>
>>>        <![CDATA[
>>>            private function load(): void
>>>            {
>>>                mloader.url = "S2FlexSample1.swf";
>>>                mloader.loadModule();
>>>            }
>>>            private function unload(): void
>>>            {
>>>                mloader.unloadModule();
>>>            }
>>>        ]]>
>>>    </mx:Script>
>>> </mx:Application>
>>> --------------------------------------------------
>>>
>>> -S2FlexSample.mxml--------------------------------
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <mx:Module
>>>    xmlns:mx="http://www.adobe.com/2006/mxml"
>>>    xmlns:s2flex="memory.web.s2flex.*"
>>>    width="100%" height="100%">
>>>    <s2flex:Sample1/>
>>> </mx:Module>
>>> --------------------------------------------------
>>>
>>> memory.web.s2flexパッケージ
>>> -Sample1.mxml-------------------------------------
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <mx:Panel
>>>    xmlns:mx="http://www.adobe.com/2006/mxml"
>>>    xmlns:seasar="http://www.seasar.org/s2flex2/mxml"
>>>    xmlns:s2flex="memory.web.s2flex.*"
>>>    width="100%" height="100%">
>>>    <seasar:S2Flex2Service id="service"
>>>        destination="sampleService" showBusyCursor="true"/>
>>>        <s2flex:Sample1Page id="page"/>
>>>        <mx:Image source="image/dummy.jpg"/>
>>> </mx:Panel>
>>> --------------------------------------------------
>>>
>>> -Sample1Page.as-----------------------------------
>>> package memory.web.s2flex {
>>>  import flash.events.Event;
>>>  import mx.controls.Alert;
>>>  import mx.rpc.events.FaultEvent;
>>>  import mx.rpc.events.ResultEvent;
>>>  import memory.web.AbstractPage;
>>>
>>>  [Bindable]
>>>  public class Sample1Page extends AbstractPage {
>>>
>>>    override public function onCreationComplete(event: Event): void {
>>>      super.onCreationComplete(event);
>>>      getMessage();
>>>    }
>>>
>>>    public function getMessage():void {
>>>      remoteCall(service.getMessage(),
>>>                  getMessageOnSuccess,
>>>                  getMessageOnFault);
>>>    }
>>>
>>>    public function getMessageOnSuccess(e:ResultEvent
>>>                                        ,token:Object=null):void {
>>>      Alert.show(e.result as String);
>>>    }
>>>
>>>    public function getMessageOnFault(e:FaultEvent
>>>                                        ,token:Object=null):void {
>>>      Alert.show(e.message as String);
>>>    }
>>>  }
>>> }
>>> --------------------------------------------------
>>>
>>> Java
>>> -SampleService.java-------------------------------
>>> package memory.web;
>>>
>>> public interface SampleService {
>>>  public String getMessage();
>>> }
>>> --------------------------------------------------
>>>
>>> -SampleServiceImpl.java---------------------------
>>> package memory.web.impl;
>>>
>>> import org.seasar.flex2.rpc.remoting.service.annotation.RemotingService;
>>> import memory.web.SampleService;
>>>
>>> @RemotingService
>>> public class SampleServiceImpl implements SampleService {
>>>  public SampleServiceImpl() {
>>>  }
>>>
>>>  public String getMessage(){
>>>    return "Server Message";
>>>  }
>>> }
>>> --------------------------------------------------
>>>
>>> 長々とソースを貼ってしまい申し訳ありません。
>>> 何卒、よろしくお願い致します。
>>>
>>> _______________________________________________
>>> akabana-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>>
>> _______________________________________________
>> akabana-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/akabana-user
>
> _______________________________________________
> akabana-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
>


akabana-user メーリングリストの案内