メモリリークを引き起こすajaxコードがあります(特にIEの場合)。ajaxのメモリリーク - setInterval
function setStatus() {
var formInput=$(this).serialize();
$.getJSON('CheckStatus.action', formInput, function(data) {
if(data == false) {
function getEventsPeriodicaly() {
getEvents();
};
var timer = setInterval(function() {getEventsPeriodicaly();}, 5000);
}
}
);
}
function getEvents() {
var formInput=$(this).serialize();
$.getJSON('StartEP.action', formInput,function(data) {
var txt = $("#txtEventsArea");
if(data != null && data.toString().length!=0) {
txt.val(data.join('\n') + '\n' + txt.val());
data=null;
}
}
)}
StartEP
public String startEP() throws Exception {
logger.info("[EP] In startEP");
try {
synchronized(status) {
if(!getStatus()) {
EventProcessor amiep = EventProcessor.getInstance();
amiep.addObserver(this);
new Thread(amiep).start();
setStatus(true);
}
}
} catch (Exception ex) {
logger.error("Unable to start EP", ex);
return ERROR;
}
logger.info("[EP] In startEP, before loop");
while(!gotNewData) {
Thread.sleep(4000);
}
gotNewData = false;
logger.info("[EP] Out startEP");
return SUCCESS;
}
StartEPアクションは、(それぞれの要求に5キロバイト程度)メッセージを返します。まずテキストをテキストエリアに設定することを考えましたが、いくつかのテストではそれが理由ではありません。それはsetIntervalメソッドですか? 何か考慮すべき点はありますか?私はこれはかなり疑わしいに見えると言うでしょう おかげ
オフトピック:なぜあなたの 'setInterval'に__two__余分な関数で' getEvents'がラップされていますか? 'setInterval(getEvents、5000)'。トピック:私はその中に漏れてはならないものは何も見ません –
今後getEventsを呼び出す別の関数があります。 –
これは 'getEvents'を二度ラップすることと何が関係していますか? –