[Seasar-user:18856] Re: Teeda-Ajaxでのメモリ増加

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2009年 11月 6日 (金) 10:54:05 JST


米林です。

サンプルありがとうございます。
今すぐ時間は取れないですが、試してみます。

宜しくお願いします。

高橋 良子 さんは書きました:
> お世話になります。
> 高橋(良)です。
> 
> いろいろと手間取り、返信が遅くなりました。
> 申し訳ありません。
> 
>> startAutoUpdateが呼ばれるタイミングはどうなっていますか?
> 
> チェックボックスの onclickで setAutoUpdate() を呼び出し、そこから
> 呼ばれます。
> 
>> 例えば、TeedaAjaxをやめて同一サンプルをjQueryで動かして
>> メモリリークが無ければTeedaAjaxでしょうし、メモリリークが
>> 同様に起これば別処理になりますので。
>>
>> teeda-html-exampleに上書きして動作するサンプルがあると
>> 解決しやすいと思います。
>> 最小構成で作成可能でしょうか?
> 
> jQueryへの移行は少々難しいので、teeda-html-example の ajax.html
> および AjaxPage.javaに手を加えて実行しました。
> 
> <ajax.html>
> 
>   -- (略) --
> 
>   var	isLoop;
>   function ajax_ajaxPage_ajaxLoopAjax(res){
>     var result = $i('loopResult');
>     result.innerHTML = res;
> 
>     if (isLoop) {
>       setTimeout("startLoopAjax()", 10000);
>     }
>   };
> 
>   function startLoopAjax() {
>     Kumu.Ajax.executeTeedaAjax(ajax_ajaxPage_ajaxLoopAjax, [],
> Kumu.Ajax.RESPONSE_TYPE_TEXT);
>   };
>   var loopAjax = function() {
>     setTimeout("startLoopAjax()", 10000);
>     isLoop = true;
>   };
>   var loopStop = function() {
>     isLoop = false;
>   };
> 
> 
>   KumuEventConf = {
>     'click_loopAjax' : loopAjax,
>     'click_loopStop' : loopStop,
>     'click_startAjax' : startAjax,
>     'click_startAjaxObject' : startAjaxObject,
>     'click_startAjaxList' : startAjaxList,
>     'change_sample1' : combinationList
>   }
> //]]>
> </script>
> 
> </head>
> <body>
> 
>   -- (略) --
> 
> <p>繰り返し</p>
> 
> <div id="loopResult">ここが変わります</div>
> <input type="button" value="Loop Ajax" id="loopAjax" />
> <input type="button" value="Loop Stop" id="loopStop" />
> 
> <hr/>
> 
>   -- (以下略) --
> 
> AjaxPage.java : 以下を追加
> 
>   private static int	count = 0;
>   private final String	loopRes =
> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
> 
>   public String ajaxLoopAjax() {
>     count++;
>     return "Loop Ajax " + count + ":" + loopRes;
>   }
> 
> 
> [Loop Ajax]ボタンを押す前のメモリ使用量
> 
>   30.2 MB
> 
> 300回実行後(= 50分後)、[Loop Stop]ボタンを押した後のメモリ使用量
> 
>   36.7 MB
>  
> となりました。
> ブラウザは IE6、メモリ使用量は フリーソフトの Process Explorer で
> ブラウザ指定で計測しています。
> 
> 何か原因がわかりますでしょうか。
> 
> 
> 高橋(良)
> 
> [E-MAIL ADDRESS DELETED] さんは書きました:
>> 米林です。
>>
>> startAutoUpdateが呼ばれるタイミングはどうなっていますか?
>>
>> 頂いた情報だけですとTeedaAjaxでメモリリークが起こっているか
>> どうか、確証が持てないです。
>> 例えば、TeedaAjaxをやめて同一サンプルをjQueryで動かして
>> メモリリークが無ければTeedaAjaxでしょうし、メモリリークが
>> 同様に起これば別処理になりますので。
>>
>> teeda-html-exampleに上書きして動作するサンプルがあると
>> 解決しやすいと思います。
>> 最小構成で作成可能でしょうか?
>>
>> よろしくお願いします。
>>
>> 高橋 良子 さんは書きました:
>>> はじめまして。
>>> 高橋(良)と申します。
>>> よろしくお願いします。
>>>
>>> Teeda-Ajaxを使用してサーバからデータを参照する処理を、
>>> setTimeout()により繰り返し実行しているのですが、ブラウザの
>>> 使用メモリが増加してしまいます。
>>> メモリ消費箇所を特定するために、あちこち省いていったら、
>>> 以下のAjax処理を繰り返すのみが残りました。
>>>
>>> var autoUpdateID;
>>> var autoUpdateTimer = 10*1000;
>>> var ajaxProcess;
>>>
>>> function XXX_ajaxUpdate(response) {
>>>   clearTimeout(autoUpdateID);
>>>   autoUpdateID = setTimeout("startAutoUpdate()", autoUpdateTimer);
>>> }
>>>
>>> //自動更新 Ajax処理 (Teeda-Ajax)
>>> function startAutoUpdate() {
>>>   if (ajaxProcess) {
>>>     ajaxProcess.cancel();
>>>   }
>>>   ajaxProcess = null;
>>>
>>>   ajaxProcess = Kumu.Ajax.executeTeedaAjax(
>>>                              XXX_ajaxUpdate,
>>>                              [param1, param2, param3],
>>>                              Kumu.Ajax.RESPONSE_TYPE_TEXT);
>>> }
>>>
>>> //自動更新処理開始/停止
>>> function setAutoUpdate(obj) {	//<- objはチェックボックス
>>>   if (obj.checked) {
>>>     autoUpdateID = setTimeout("startAutoUpdate()", autoUpdateTimer);
>>>   } else {
>>>     clearTimeout(autoUpdateID);
>>>   }
>>> }
>>>
>>> 上記の処理ではメモリは一切増えないでほしいのですが...。
>>>
>>> メモリの増加量は、サーバからの送信データ量に比例しているようです。
>>>
>>> 使用ブラウザは IE6, Firefox3.5で、Firefoxのほうが増加量が多いです。
>>>
>>> 原因は何が考えられるでしょうか。
>>>
>>>
>>> 高橋(良)



-- 
米 林   正 明
http://www.abby.co.jp


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