2016-11-14 3 views
2

여러 항목을 강조 표시하고 항목을 저장할 때 (AS3에서) 그래픽 콘솔을 쓰고 있지만, 일단 수천 개의 항목이 있으면 프로그램이 지연되고 스크롤이 느려집니다. 가속을 사용하여 스크롤 할 수있게하려면 속도가 더 느려집니다.거대한 채팅 로그 또는 콘솔 로그를 스크롤 가능한 창에 표시하는 가장 좋은 방법은 무엇입니까? (AS3)

내 저장된 항목 인 거대한 개체 블록을 어떻게 위아래로 이동합니까? 사용자가보고있는 곳에서 메시지를 점진적으로로드해야합니까? 그렇다면 스크롤바는 어떻게 처리할까요?

답변

2

당신은

  • 각 로그 항목 방금 안드로이드에서 레이아웃을 팽창처럼 원하는 무엇이든을 보유 확장으로 DisplayObject 것 대신 TextField, 너무 스크롤 가속 구축하는 것이 더 쉽습니다 사용자 지정 컨테이너를 작성해야합니다.

가장 중요한 부분은 감소한다 메모리 사용 : 당신은 단지 다음, 글로벌 배열처럼 뭔가 로그 enteries의 일반 텍스트를 저장하고 스크롤 위치가 충분히 가까이있을 때,이 레이아웃을 생성 할 수

  • 표시 할 컨테이너에 추가 할 수 있으며, 그 반대의 경우도 훨씬 뒤에서 대화를 제거 할 수 있습니다. 그러나이 프로세스는 런타임 중에 많은 메모리를 사용합니다.
  • 그래서, 단지 개념을 따른 안드로이드 DiskLruCache 그것이 SharedObject's를 사용 너무 우리의 스크롤 위치에서 디스크 대신 메모리 것이 우리의 눈에 보이지 않는 데이터의 일부를 저장하는 것이 가능하다 .
2

어떻게 내 저장된 엔트리가 아래에있는 객체의 거대한 블록을 이동합니까?

그렇지 않습니다. 이전에 알려 주신 바와 같이 의 DisplayList이 크게 증가하면 메모리 오버 헤드가 증가하고 Display Objects을 관리하는 관리 작업으로 인해 결국 성능이 저하됩니다. 지금까지 가지고있는 것을 구현하는 방법에 대한 자세한 내용은 언급하지 않으므로 내 의견은 일반적인 것이 될 것입니다.

다양한 플랫폼에 의해 처리되는 방법 Flex, iOS 및 iOS에서 목록 구성 요소은 플래시가 필요한 최소한의 개체 수만 표시하는 것으로 사용자가 스크롤 할 때 개체가 내부 및 외부로 이동합니다 렌더링리스트 추가 최적화는 재사용되는 "템플리트"오브젝트의 "풀"을 사용하여 초기화 시간 패널티를 지불하지 않는 것입니다. 이 "... 버퍼링 ..."기술에 대한 실제 이름이 있을지 모르지만 나는 그것이 무엇인지 (잘하면 어떤 사람이 그것을 제공 할 것이고 어떻게 작동하는지에 대한 자세한 설명에 대한 링크) 알지 못합니다.

그리고 어떻게 작동하는지 - 사용자가 스크롤 할 때 어떤 물체가 화면 밖으로 이동하고 재생할 수 있는지, 화면 상을 이동하려고하는지 등을 알아내어 DIY 할 수 있습니다. 물론 모두는 Array, ArrayList 또는 ArrayCollection과 같은 데이터 구조에 객체를 저장했다고 가정합니다. 이 모든 것을 처음부터 코딩하는 대신에 DataGrid 또는 List 구성 요소가 사용자의 요구를 충족시키는 지 확인할 수 있습니다.이 구성 요소는 모두이를 관리합니다.

Flash Tutorial: The DataGrid Component (YouTube 동영상) 밖에 다른 예와 자원의
Customize the List component
많이.

는 (다시, 나는 데이터 그리드 및 기타 목록 기반 구성 요소가 시각적 스타일 "스킨"과 사용자 정의 항목 렌더러 사용하여 광범위하게 정의 할 수있는 플렉스에서 일 - 그것은 플래시에서 동일한 경우 확실하지)를

+1

"* 초기화 시간 벌금을 지불하십시오 *"내가 본 것만 큼 파괴 시간 벌칙이 더 많습니다. 가비지 컬렉터는 임계 값에 도달 할 때까지 쓰레기를 계속 쌓습니다. 그런 다음 실제로 약간의 성능이 필요한 객체를 삭제하면 프레임이 생략 될 수 있습니다. 개체가 GC에 의해 수집되는 것을 방지하여 메모리에 남아 강제로 메모리가 부족하지 않도록 다시 사용하는 방법은 "개체 풀링"입니다. – null