2009-09-09 3 views
0

예를 들어 이 아닌 이벤트를 수신하는 이벤트 리스너 함수가있는 경우 프로그램의 수명 기간 동안을 다시 호출 할 수 있습니다. 리스닝 객체는 결코 가비지 수집 될 필요가 없습니다.제거되지 않은 이벤트 수신기는 얼마나 많은 리소스를 사용합니까?

얼마나 많은 메모리가 사용됩니까?
무시할 수 없다면 removeEventListener() 문을 사용하면 내 코드를 읽기 쉽게 만들어주기 때문에 청취자를 제거하지 않을 것입니다.

+0

그래서이 수신기를 사용하는 코드는 다른 코드에서 사용되지 않습니다. 내게 위험하다는 것은 누군가가이 코드를 복사 할 수 있으며, removeEventListener가 호출되지 않고 메모리 누출이 발생한다는 것을 인식하지 못한다는 것입니다. –

답변

0

이는 청취자가 얼마나 크고 복잡한 지에 전적으로 달려 있습니다. 대부분의 경우 메모리 영향은 무시할 만하지만 메모리에 보관중인 객체가 여러 다른 객체를 메모리에 유지할 수 있습니다. 그 중 하나가 스트리밍 비디오 또는 뭔가, 그것은 귀하의 메모리, 프로세서 및 네트워크 빨아있을 수 있습니다.

이벤트 리스너를 처음 추가 할 때 useWeakReferences를 true로 설정할 수도 있습니다. 이렇게하면 리스너와 이벤트 디스패처 간의 연결이 약해 지므로 후자가 다른 곳에서 삭제 된 경우 메모리가 이전 메모리를 보유하지 못합니다. More on that here.

그래도 다시 사용하지 않을 개체를 메모리에 두는 것은 결코 바람직하지 않으며 removeEventListener()을 피할 이유가 없습니다. 올바르게 작동하기 전에 코드 가독성을 위해 노력하는 것은 결코 좋은 생각이 아닙니다. 코드가 보이는 방식에 관심이 있다면 호출을 cleanupUnusedListeners() 또는 뭔가라는 메서드 안에 넣습니다. 사실, 누락의 소스를 찾고있을 때 removeEventListener()을 넣지 않은 지점을 찾기가 더 어려울 것이므로 생략하는 것은 읽기 쉽지 않습니다. 그것은 예쁘지 않을 수도 있지만 그것이 바로 그 방법입니다, 잭.

+0

나는 Mims와 동의합니다. addEventListener를 호출하는 객체가 크거나 참조하는 객체가 많을수록 제거되지 않은 참조가 보유 할 메모리가 많아집니다. –

0

수천 가지가 아니라면 무시할 수 있습니다. EventDispatcher의 작동 방식을 확인하고 소스 코드를 살펴보십시오.

관련 문제