[akabana-user:184] Re: S2Flexのメモリリークについて
有井 貴志
[E-MAIL ADDRESS DELETED]
2008年 10月 16日 (木) 19:32:14 JST
有井です。
ふなくらさん、ご回答有難うございます。
メモリはお察しの通り、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 メーリングリストの案内