ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   Flex 3 SDK
     メモリー解放ができません。
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 トピック
murcie
投稿日時: 2010-4-17 1:29
やや お馴染みさん
登録日: 2010-2-19
居住地:
投稿: 5
メモリー解放ができません。
Flex3にてWebサーバーのデータベースよりデータを取得し、画面表示するプログラムを作成しました。8時間程度の動作確認では問題なく稼動していましたが、「14日程度表示しっぱなしにしていたら画面内にある他画面へのメニューボタンが反応しない状態になった。」と客先からの連絡、調査の結果メモリ使用量が1時間につき10MB程度づつ増えている事が確認できました。理想的には何日でも何年でも表示し続けても動作に不具合が生じないようにしたいと考えています。
何方かお力添えのアドバイスをよろしくお願いします。
以下にソース(抜粋)を載せますので、よろしくお願いします。

[Main.mxml]全文
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="XMLLoaderStart();">
<mx:Style source="DrawSiteState.css" />
<mx:Script source="XMLLoader.as" />
<mx:Script source="RequestWatch.as" />
<mx:Canvas id="cvsFrame" height="555" width="760" creationPolicy="all">
    <mx:Canvas id="cvsDraw" borderStyle="solid" height="540" width="750" styleName="canvas" >
        <mx:Image id="imgArea1" x="5" y="15" />
        <mx:Image id="imgArea2" x="5" y="300" />
        <mx:Image id="imgArea3" x="500" y="15" />
        <mx:Image id="imgArea4" x="500" y="250" />
    </mx:Canvas>
    <mx:Canvas id="prbBar" height="15" width="200" x="270" y="535" creationPolicy="all" />
    <mx:Label id="timeField" width="140" x="615" y="537" text="" />
</mx:Canvas>
</mx:Application>

[XMLLoader.as]表示設定XML読み込み関数モジュール
XMLLoaderState()もこの中にあり、設定ファイル読み込み処理後RequestWatch.timerInitial()を呼び出します。

[RequestWatch.as]抜粋
private var timerTimer:Timer; // 監視タイマー
private var miCallCount:int = 0;
private var HttpSend:HTTPService;

// 監視タイマー初期化及び起動
private function timerInitial():void {
    timerTimer = null;
    timerTimer = new Timer(2000, 0);
    timerTimer.addEventListener("timer", timerHandler);
    timerTimer.start();
}

// 監視タイマーハンドラ
private function timerHandler(event:Event):void {
    Request_send();
}

// リクエスト送信
private function Request_send():void {
if (2147483647 <= miCallCount)
miCallCount = 1;
else
miCallCount++;

HttpSend = new HTTPService();

var sUrl:String = データ取得CGIのURLを指定;
HttpSend.url = sUrl;
HttpSend.method = "GET";
HttpSend.resultFormat = "text";

var uv:URLVariables = new URLVariables();
uv.count = miCallCount;
HttpSend.request = uv;

// イベントリスナ登録
HttpSend.addEventListener(ResultEvent.RESULT, send_res, false, 0, true);
HttpSend.addEventListener(FaultEvent.FAULT, faultHandler, false, 0, true);

// リクエスト送信
HttpSend.send();
}

// リクエスト受信イベント
private function send_res(e:ResultEvent):void {

// 受信データより画面描画をキャンバス(cvsDraw)に対して行う
:
:

// イベントリスナ解放
HttpSend.removeEventListener(ResultEvent.RESULT, send_res);
HttpSend.removeEventListener(FaultEvent.FAULT, faultHandler);
// 受信領域クリア
HttpSend.clearResult(true);
HttpSend = null;
}

以上

取り敢えず正常系のみの記述と画面描画部分は省略してあります。
デバック時に適当なタイミングでcvsDraw.removeAllChildren ()を呼び出し、10分程度待ってみましたがメモリ解放は行われなかったので、表示側でのメモリリークは無いのではないかと考えています。(引き続き調査続行中ですが)
HTTPService周りの手順が正しく行われているか精査をお願いします。もしこの掲示ソース部分に問題が無い場合(ある意味あると喜ばしいのですが…)それ以外では何をどう注意すればよろしいのでしょうか?
アドバイスよろしくお願いします。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » メモリー解放ができません。 murcie 2010-4-17 1:29
     Re: メモリー解放ができません。 kacchan6 2010-4-17 12:26
     Re: メモリー解放ができません。 dsh 2010-4-19 13:50
     Re: メモリー解放ができません。 murcie 2010-4-23 8:41

投稿するにはまず登録を