2011-02-08 3 views
1

잠깐 동안 Windows 7 가제트의 메모리 누수 작업을하고 있었는데 메모리 누수가 악화되었다고 생각하는 많은 기능을 구현/누수가 더 많이 발생했습니다. 나는 약 16 시간 동안 4 개의 가젯을 실행했으며 메모리 사용량은 22,000K에서 36,000K로 증가했습니다. 그러나, 나에게 혼란스럽게 한 것은 핸들, USER 개체 및 GDI 개체가 거의 동일하게 남아 있다는 것입니다. USER와 GDI Object는 실제로 정확히 동일하게 유지되었고 Handles는 그 시간에 1026에서 1034와 같은 것으로 뛰어 올랐습니다. 내 가제트가 매 7 초마다 새로 고침하기 때문에 사이드 바의 기발함이라고 생각합니다.메모리 누수에 관한 질문 Javascript Windows Gadget (일반적으로)

일반적으로 두 가지 질문이 있는데, 어떤 종류의 메모리 누수가 이런 문제를 일으키는 것입니까? 그리고 제 경우에는 Ajax를 사용하여이 가제트의 웹 서비스에 액세스합니다. Ajax에서 이러한 일이 발생할 수있는 것이 무엇인지 잘 아는 사람이라면 좋을 것입니다.

나는 자바 스크립트에서 메모리 누출의 주된 원인에 대한 기사를 이미 보았는데, 핸들과 객체가 효과적으로 동일하게 유지 될 때 메모리가 너무 많이 올라갈 이유가있는 사람이 있는지 궁금하다. 아마도 Ajax에 대한 알려진 원인이나 그러한 경우에 대한 일반적인 프로그래밍이 있을까요?

+0

심각한 문제가 될만한 14KB의 크기 증가는 생각하지 않습니다. – Pointy

+0

@Pointy 수천을 나타 내기 위해 K를 사용했지만 KB로 읽는 것에 대해서 생각조차하지 않았지만 작업 관리자가 K를 사용하여 KB를 나타 내기 때문에 의미가 있습니다. 나는 최근에 간격을두고있다. 하지만 그래, 14,000 KB가 증가했습니다. – user535617

+1

그래서 평신도의 용어로 14 메가 바이트입니까? 실제로 관련된 코드를 보지 않고도 매우 구체적인 답변을 얻지 못할지 의심 스럽습니다. – Pointy

답변

0

라이브러리가없는 JS 작업에 대해서는 감사하지만이 같은 상황에서는 JQuery (또는 Prototype, Mootols 등)를 믹스에 넣을 수 있습니다. Ajax 요청 (및 DOM 조작)을 통해 메모리 소비가 매우 잘 테스트됩니다.

처음에는 DOM 코드를 수정할 필요가 없지만 Ajax 요청을 JQuery의 Ajax 메소드로 바꾸어보십시오. 그런 다음 다시 메모리 테스트를 실행하십시오. 이렇게하면 XHR 코드에 메모리 버그가 있다는 것을 알 수 있습니다.

그렇지 않으면 DOM 코드의 이벤트 처리기와 관련이 있습니다 (요소를 제거하기 전에 제대로 제거되지 않은 것 같습니다). 어떤 시점에서 DOM 요소를 제거하고 추가한다고 가정합니다. IE에서 핸들러가 제거되지 않으면 메모리 누수가 발생합니다 (DOM 요소는 무기한으로 유지됩니다).

+0

DOM 요소를 추가하고 제거하면 올바른 결과를 얻을 수 있습니다. 그래도 질문이 있는데 JQuery가 보안 인증서 오류를 무시할 수 있습니까? 지금 당장은 특정 상황에서 JS를 설정했습니다. 나는 일반적인 경우에 나쁜 습관이라는 것을 충분히 알고 있지만이 경우 실제로 필요하다. – user535617

+0

그게 큰 질문입니다 - 보안 인증서 오류를 처리해야하는 것은 실제로 만들지 않았습니다. 나는 잘 모르겠다. – Shakakai

0

Windows 7 64 비트 SP1에서는 sidebar.exe 메모리 누수가 발생하며 이로 인해 영향을받을 수 있습니다. 내가 아는 한, 아직 해결되지 않았지만 this blog post은 해결 방법을 제시합니다.