2010-01-28 12 views
1

ASP.NET AJAX와 jQuery를 함께 사용하여 IE와 Firefox 모두에서 메모리 누수가 느립니다. 내 시나리오는 여기에 설명 된 것과 매우 유사합니다. Preventing AJAX memory leaks을 제외하고는 jquery와 asp.net AJAX가 아니라 protyotype을 사용합니다. Timer를 사용하여 매 60 초마다 새로 고침되는 UpdatePanel에 데이터를 표시하는 웹 페이지가 있습니다.아약스 메모리 누수

function pageLoad(sender, args) { 
    $("#item").unbind(); 
    $("#item").hover(
     function() { 
      // do something 
     }, 
     function() { 
      // do something 
     }); 
} 

그래서이 60 초마다 호출됩니다 그들이 asp.net 부분 포스트 백에서 길을 잃었 때문에 모든 "부분 포스트 백"에서 호출됩니다 자바 스크립트 pageLoad 함수 AJAX에, 나는 이벤트 바인드 다시. 이것만으로도 메모리 누출의 원인이 될 수 있습니까? ,

$(function() { //.ready shortcut... 
    $("#item").live("hover", 
    function() { 
     // do something 
    }, 
    function() { 
     // do something 
    }); 
}); 

참고이 requires jQuery 1.4.1을하지만, 메모리의 측면에서 전혀 다른 역할을 :

답변

2

대신이 작업을 수행합니다. 60 초마다 삽입되는 모든 객체에 새 이벤트를 첨부하는 대신 entire DOM watching for the event to bubble에 연결합니다.

+0

마우스 오버, 마우스 오버 대신 마우스 오버를 사용해야했습니다. 함수 매개 변수가 하나뿐입니다. 이벤트가 작동하는 데 한계가 있습니까? .scroll 및 .resize (윈도우 객체에서 크기 조정) 문제가 있습니다. – user210757

+0

@unknown : 특정 이벤트 만 작동합니다. 전체 목록은 여기를 참조하십시오. http://api.jquery.com/live/ jQuery 1.4는 .live()에 더 많은 이벤트 유형을 지원합니다. 1.4 기능. –

+0

Nick - 마우스 오버 유형 이벤트를 대체 할 수 있지만 asp.net 부분 다시 게시에서 "사라지는"컨트롤을 재현하는 방법을 찾지 못했습니다. progressbar 특히, 내가 모든 바인딩을 바인딩을 다시 생성해야합니다 (60 초마다) 인스턴스화하고 이것이 내 메모리 누수가 어디 믿습니다. 이 주변에 어떤 방법이 있니? – user210757

0

예, 가능합니다.

시도해 볼 첫 번째 시도는 거기에 정의 된 두 가지 기능 (가능한 경우)을 가져 와서 상위 수준에 배치하여 한 번만 정의되도록하는 것입니다.