[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 メーリングリストの案内