2010-12-16 4 views
1

변경하지 않으려는 경우 디스패처에 이벤트를 저장하는 것이 더 효율적입니다. 비용이 많이 드는 것은 아닙니까? 이미 저장된 이벤트를 파견하면 잃는 정보가 있습니까?이벤트가 일반적으로 발송시 생성되는 이유는 무엇입니까?

+0

로버트 페너의 신호는이 질문을하는 다른 누구에게나 유용 할 수 있습니다. http://flashblog.robertpenner.com/2009/09/my-new-as3-event-system-signals.html – Pup

답변

4

기본적으로 묻는 것은 개체 풀링의 특정 사용 사례와 개체 풀링과 개체 생성의 성능입니다. 자바와 같은 언어는 자바가 당신을 위해 이것을하기 때문에 객체 풀링의 많은 이점을 얻지 못합니다. 그리고 자신이 직접하는 것보다 더 낫습니다. 실제로 Java 엔지니어는 Java가 사용자가 할 수있는 것보다 수천 가지 객체를 더 잘 할당하고 크기를 조정하고 처리하기 때문에 이렇게하지 말아야한다는 것을 분명히했습니다. 이것이 GC의 핵심입니다. 자바에서 객체 할당은 이미 당신을 위해 풀링을하고 있지만 낮은 수준에서 자바와 다른 언어로 된 메모리 할당은 C보다 빠릅니다. 자바에서 할당 된 모든 객체는 JVM에 의해 준비된 메모리 풀에서 나옵니다.

http://www.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-jw22JavaUrbanLegends

이벤트가 대신 그들을 캐시의 파견시 생성되는 또 다른 이유는, 그들 각각의 파견 사이의 변화를 매개 변수를 전달합니다. 예를 들어, 입력 한 문자, 마우스를 클릭 한 곳 등. 재활용 이벤트는 좋은 아이디어처럼 들릴 수 있습니다. 갑자기 잘못된 이벤트로 오래된 정보를 보내고 있습니다. 매번 새로운 이벤트를 추가하고 올바른 데이터로 올바르게 초기화하는 것이 좋습니다. 작성자가 더 간단하고 오류가 발생하기 쉽습니다.

이벤트를 다시 사용하면 기술적 인 문제가 발생할 수 있습니다. 이벤트 취소 계획은 보통 일부 청취자가 디스패치 한 후 수정 된 이벤트에 해당 정보를 저장합니다. actionscript에서 event.preventDefault()를 호출하여 이벤트 리스너의 체인에 영향을 줄 수 있습니다. preventDefault가 호출 된 후 해당 이벤트를 다시 사용하기 시작하면 어떻게됩니까? 그리고이 이벤트가 아직 시작되지 않은 리스너 (callLater/invokeLater는 어렵게 만듭니다)가이 이벤트를 사용하고 있지 않다는 것은 언제 확실합니다. Java/Actionscript에 콜백이 없습니다.이 콜백 이벤트는이 이벤트가 재사용해도 괜찮습니다 (풀에 객체를 반환하는 교정 의미가 없음).

그렇다고해서 이벤트를 개최하고 재사용하는 것이 더 효과적이라고 생각하지는 않습니다. 그러나 고성능 케이스가 더 빠르다고해서 매번 모든 것이 좋은 아이디어라는 것을 의미하지는 않습니다. 문제가 발생할 때까지 최적화하지 마십시오.

+1

+1 이유가 있지만 특히 "새로 만들기"동사를 사용하는 경우. –

+0

생각해 보겠습니다. ActionScript 3.0 (질문에 태그가 추가되어 있음)에 추가하면 개체 풀링이 성능을 상당히 향상시킬 수 있습니다. http://lab.polygonal.de/2008/06/18/using-object-pools/. JVM이 더 정교하다고 생각합니다. – Allan

관련 문제