2009-09-21 3 views
2

IE Mobile을 사용하는 기기에서 오프라인 (Google Gears 사용) 애플리케이션을 작성했습니다. 장치는 시간이 지남에 따라 장치를 사용할 수 없게되는 속도로 메모리 누수가 발생합니다.IE Mobile에서 메모리 누수를 방지하려면 어떻게합니까?

문제 페이지는 로컬 Gears 데이터베이스에서 항목을 가져 와서 각 항목의 테이블을 각 행의 마지막 열에있는 링크와 함께 렌더링하여 항목을 엽니 다 (링크는 onclick = "open ('myID') '). 엔트리가 끝나면 테이블로 돌아갑니다.이 테이블은 RE 렌더링됩니다. 문제가있는 것처럼 보이는이 테이블의 반복되는 건물입니다. 주로 onclick 이벤트.

표는 다음과 같이 본질적으로 생성됩니다 나는 메모리 누수의 일반적인 원인에 읽었과에 "널 (null)"다시 렌더링 테이블 전에 각 링크의 onclick 이벤트를 설정하는 시도

var tmp=""; 
for (var i=0; i<100; i++){ 
tmp+="<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+ 
    " onclick=\"afunction();return false;\">link</a></td></tr>"; 
} 

document.getElementById('view').innerHTML = "<table>"+tmp+"</table>"; 

그러나 그것은 아직도 누출하는 것처럼 보인다.

아무도 아이디어가 없습니까? 함수는 각각의 링크를 통해 호출되는 것이 중요한 경우

은 다음과 같다 : 어떠한 방식으로 순환 참조 구성

function afunction(){ 
document.getElementById('view').style.display="none"; 
} 

을겠습니까?

제이크

+0

돌아온다? 브라우저를 닫으면 메모리가 완전히 해제됩니다. "소프트 닫기"를 실행하면 다시 열 때 성능이 향상되지만 메모리를 해제하지는 않습니다. 이 장치는 XDA 궤도 2입니다. –

답변

0

가 메모리에 도움이 될 것입니다 경우 모르겠어요,하지만 대신 문자열을 연결, 당신은 배열에 그들을 밀어 성능 향상을 위해 그들과 합류 할 수 있습니다. 뭔가 같은 :

당신은 페이지의 콘텐츠 내가 과거에 사용했던 오래된 AJAX 책에서 언급 된 IE의 메모리 누수가 변경 스크립트를 많이 수행하는 경우
var tmp=[]; 
for (var i=0; i<100; i++){ 
tmp.push("<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+ 
    " onclick=\"afunction();return false;\">link</a></td></tr>"); 
} 

document.getElementById('view').innerHTML = "<table>"+tmp.join('')+"</table>"; 
+0

이것은 좋은 팁이지만 예제는 여전히 많은 문자열을 연결합니다. – rpetrich

0

(그리고 잘 할 수있다 여기에 타격을가하십시오). 페이지가 언로드되면 변경된 divs/span/etc를 삭제해야합니다. 그렇지 않으면 해당 내용이 메모리에 남아 있습니다.

<script type="text/javascript"> 
window.onunload = clearAJAXContent; 

function clearAJAXContent() { 
/* clear any dynamic content placeholders here*/ 
} 
</script> 

나는 분명 할 때 innerHTML을 ""로 설정하려고한다고 생각합니다. 내가 집에 돌아 왔을 때 나는 다른 것을 찾으면 그 책을 찾고 대답을 갱신하려고 노력할 것이다. 그러나 그 동안 시험 할 물건이 있어야한다.