수많은 CPU를 사용하지 않고 많은 양의 풍부한 컨텐츠 (이미지, 서식)를 컨트롤에 신속하게 추가합니까?

StackOverflow https://stackoverflow.com/questions/148881

  •  02-07-2019
  •  | 
  •  

문제

GUI에서 풍부한 형식 (색상, 글꼴, 이미지)과 함께 UNIX "Tail -F"를 사용하는 것과 유사한 기능을 만들기 위해 WXWIDGET 및 Visual C ++를 사용하고 있습니다. WXMSW와 WXMAC를 모두 타겟팅하고 있습니다.

명백한 대답은 wxtextctrl :: setDefaultStyle () 및 wxTextCtrl :: writeText ()로 호출을 사용하여 wxte_rich와 함께 wxtextctrl을 사용하는 것입니다.

그러나 릴리스 모드로 컴파일 된 3GHz 워크 스테이션에서는 라인 당 평균 1ms의 로그를 유지하여 결국 뒤 떨어지는 로그를 유지할 수 없습니다. 각 라인마다 다음과 같이 말합니다.

  1. setDefaultStyle ()에 대한 두 번의 호출
  2. 두 개의 호출 2 개의 writetext ()
  3. Freeze () 및 Thaw () 위젯의 호출

이 작업을 실행할 때 CPU는 약 20,000 줄을 채운 후 WXMSW를 사용하여 하나의 코어에서 100%로갑니다. 이 프로그램은 특정 임계 값에 도달하면 더 뒤쳐지면 눈에 띄게 느려집니다.

다른 컨트롤 (wxlistctrl, wxrichtextctrl 등)을 사용할 수 있습니다.

도움이 되었습니까?

해결책 3

wxvlistbox에서 파생. 문서에서 :

wxvlistbox는 일반 Listbox와 다음과 같은 두 가지 주요 차이점을 갖춘 ListBox와 같은 컨트롤입니다. 자체를 저장하지는 않지만 OndrawItem () 콜백을 사용하여이를 그리기 때문에 임의로 많은 수의 항목을 가질 수 있습니다 (따라서 가상입니다. ListBox) 및 해당 항목은 OnMeasureItem ()에 의해 결정된대로 가변 높이를 가질 수 있습니다 (따라서 가변 높이 라인이있는 ListBox이기도합니다).

다른 팁

보기에서 선의 양을 제한하는 것을 고려해 보셨습니까? 우리가 비슷한 문제를 겪었을 때, 우리는 단지 10,000 줄을 넘지 않는지 확인하지 못했습니다. 더 많은 선이 하단에 들어 오면 상단에서 선을 제거합니다. 이것은 wxwidgets를 사용하지 않았으며 Mac에서 기본 Cocoa UI를 사용하고 있었지만 문제는 동일합니다. 스타일링 된 텍스트보기 (색상, 서식 및 예쁜 인쇄)가 크게 증가하면 하단의 더 많은 데이터가 꽤 느려집니다.

사용중인 컨트롤은 단순히 던지는 데이터의 양을 위해 구축되지 않은 것 같습니다. 맞춤 제어를 구축하는 것을 고려할 것입니다. 다음은 고려할 수있는 것들이 있습니다.

  1. 새 라인이 들어 오면 이전 줄을 다시 렌더링 할 필요가 없습니다. 새 데이터로 인해 변경되지 않으며 레이아웃이 변경되지 않습니다.
  2. 보이는 부분과 몇 가지 룩백 화면을 한 번에만 유지하십시오. 이렇게하면 조금 가벼워집니다. 그러나 사용자가 룩백보다 더 뒤로 스크롤하여 모든 것이 원활하게 보이게하려면 자신의 스크롤 관리를 수행해야합니다.
  3. 한 번에 한 줄을 반드시 업데이트 할 필요는 없습니다. 새로운 데이터가 있으면 모든 데이터를 가져 와서 업데이트하십시오. 10 줄이 정말 빨리 얻어지고 한 번에 화면을 업데이트하면 라인별로 수행하는 오버 헤드를 저장할 수 있습니다.

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top