2012-04-19 2 views
2

우리는 TTreeView에 많은 노드가 있습니다. 일반적으로 20,000 개 이상의 노드가 있습니다. 이 TTreeView은 도킹 된 인터페이스 (DevExpress Docking Library)에서 사용됩니다. 응용 프로그램의 양식이 도킹되거나 고정 해제되면 도킹 가능한 양식의 핸들이 변경됩니다. 결과적으로 모든 양식 및 컨트롤의 DestroyWndCreateWnd 절차가 호출됩니다.Delphi TreeView DestroyWnd/CreateWnd slow

TTreeView의 경우 DestroyWnd은 노드를 스트림에 저장하고 CreateWnd은 노드를 다시로드합니다. 매우 큰 트리 뷰를 가진 우리 애플리케이션에서는 노드가 스트리밍되고 다시 들어가는 동안 긴 지연이 발생합니다.

질문 : 지연을 방지하는 방법은 무엇입니까? 나는 많은 사람들이 을 매우 많이 사용한다고 들었습니다. 나는 TTreeView에서 유래하지 않았다고 믿습니다.이 문제를 피할 수 있습니까? 개발자 익스프레스 TcxTreeView을 시도했지만 TTreeview에서 파생되므로 동일한 문제가 발생합니다.

답변

11

20,000 개의 노드가 너무 많아 표준 TTreeView에 입력 할 수 없습니다. TVirtualTreeView을 사용하면 확실히 많은 수의 노드를 표시하는 방법입니다. 주요 이점은 노드 데이터가 TreeView 자체에 저장되지 않는다는 것입니다. 디스플레이 및 사용자 상호 작용에만 사용됩니다. 데이터를 창 레크 리 에이션의 영향을받지 않도록 메모리에 저장하고 TVirtualTreeView은 주어진 시간에 즉시 필요한 데이터 조각을 요청합니다. TVirtualTreeView 창을 다시 만드는 것은 현재 데이터로 창 디스플레이를 다시 칠하는 것입니다.

표준 TTreeView과 달리 TreeView 자체에 데이터를 저장합니다. 따라서 TTreeView.DestroyWnd()TTreeView.CreateWnd()은 창을 다시 만들 때마다 모든 노드 데이터의 복사본을 저장하고 복원해야합니다. 노드가 많을수록 해당 데이터를 관리하는 데 더 많은 오버 헤드가 발생합니다.