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

jun funakura [E-MAIL ADDRESS DELETED]
2008年 10月 16日 (木) 15:41:13 JST


ふなくら(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 メーリングリストの案内