문제

Windows 양식에 표시 해야하는 큰 데이터베이스 테이블이 있습니다. 데이터는 일종의 "카테고리 목록"으로, TreeView와 같은 구조로 사용자에게 표시 해야하는 일종의 하위 범주가있는 범주가 있습니다. TreeView Control에는 지연 로딩이 있지만 문제는 4 개의 열 문자열 값을 갖는 수십만 개의 루트 노드가있을 수 있다는 것입니다. TreeView에 100000 개의 노드를 추가하려고 시도했는데 완료하는 데 5 분이 걸렸습니다. 그러한 작업을위한 다른 옵션이 있습니까? 나에게 아이디어를 줄 수 있습니까? 그렇지 않습니다 가지다 treeview ..

도움이 되었습니까?

해결책 5

TreeView의 가상/서버 모드를 구현하기로 결정했습니다.

답변 주셔서 감사합니다.

다른 팁

그것은 많은 노드이지만 treeview에 노드 목록을 추가 할 때 startupdate ()를 호출 한 다음 endupdate ()를 호출하려고 했습니까? 그것은 아마도 당신의 성능을 조금 일으킬 것입니다!

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx

이와 같은 애플리케이션의 경우 "검색 AS 입력"과 같은 기능을 구현하는 경향이 있으며,이 기능은 텍스트 상자에 입력 할 때 카테고리 이름을 반환합니다. 예를 들어, 각 KeyStroke에서 DB로 돌아가서 텍스트 상자의 내용으로 시작하는 상위 10 개 정도의 값을 반환합니다. 10 개가 넘는 결과가 있으면 더 많은 결과가 존재한다는 것을 나타냅니다. 또는 검색을 개선하라고 말합니다. IMO 직접 검색은 항상 분류 및/또는 페이징을 능가합니다. 나는 페이징이 싫다. 검색 기능이 충분하지 않다는 것은 거의 항상 입장입니다!

아마도 일종의 페이징 메커니즘을 구현할 수 있습니다. TreeView의 10 만 항목은 사용자의 관점에서 읽기가 매우 어렵습니다. 한 번에 1,000 명 이상의 루트 노드를 제공하면로드 시간을 확실히 줄일 수 있습니다.

캐시 기능을 사용할 수 있습니다. 200000 레코드는 일반적으로로드하는 데 0,2s가 필요합니다. 사용하려면 언어 지원을 확인하십시오.

문안 인사,

TreeView에는 이벤트가 있습니다. 로드 할 컨텐츠가 노드를 즉시 결정하는 데 사용할 수 있습니다. 즉, 먼저 TreeView의 최상위 노드 만로드합니다.

사용자가 노드를 확장하려는 경우 필요한 데이터를 가져와 해당 노드의 서브 노드를 채울 수 있습니다. Treenode의 태그 속성을 사용하여 데이터가 어떤 노드에 속하는 ID를 저장하십시오.

startupdate () 및 endupdate ()를 사용하거나 add () 대신 addrange ()를 사용하여 훨씬 빠르기 때문에 노드를 추가하십시오.

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