2010-06-29 5 views
4

간단한 검색 응용 프로그램의 색인으로 사용되는 listview가 있습니다. 색인의 각 항목은 단어이며 해당 항목을 클릭하면 해당 항목이 검색 텍스트 상자에 추가됩니다. 사용자는 먼저 자신이 선호하는 단어와 검색 텍스트 상자를 클릭 한 다음 검색을 클릭하여 문서를 검색 할 수 있습니다. 문제는 ListView에 약 1000 개가 넘는 항목을 추가하면 많은 런타임이 필요하다는 것입니다. 나는 진행 막대를 디자인하고 폼이로드되는 즉시 목록보기에 항목을 추가하기 시작하는 타이머를 추가했습니다. 이는 애플리케이션에 대한 응답 성을 제공하지만 여전히 효율성은 매우 낮습니다. 문서베이스가 충분히 커질 때 인덱스에 약 10 만 단어가있을 수 있으므로이 작업을 수행하는 데보다 효율적인 방법이 필요합니다. 어쩌면 ListView 구성 요소를 다른 것으로 변경해야 할 수도 있습니다. 이리스트 뷰에 항목을 추가 할 수있는 타이머의 코드입니다 :목록보기에 많은 항목 추가하기

if (!listViewDone) 
     { 
      int pos = 0; 
      ListView listView1 = Search.getInstance().getListView(); 
      listView1.BeginUpdate(); 
      for (pos = listViewPos; pos < termf.Count && pos < listViewPos + listViewChunk; ++pos) 
      { 
       TermFreq t = termf[pos]; 
       listView1.Items.Add(new ListViewItem(new String[] { t.term })); 
       progressBar1.Value = pos; 
      } 
      listView1.EndUpdate(); 
      listViewPos = pos; 

      if (pos == termf.Count) 
      { 
       listViewDone = true; 
       termf = null; 
       timer1.Enabled = false; 
       Visible = false; 
      } 
     } 

답변

3

hmemcpy가 언급 했으므로 VirtualMode은 상당히 빠르게 처리 할 수 ​​있습니다. 프로젝트의 상업성에 대해서는 확신 할 수 없지만 FastObjectListView 변형을 포함하는 우수한 오픈 소스 ObjectListView을 사용했습니다.

이것은 기본적으로 확장 된 가상 ListView로서 매우 빠른 속도로 작동하며 보너스가 추가로 더 잘 작동합니다. 설명서에 따르면 "0.1 초 미만의 10,000 개의 개체 목록을 만들 수 있습니다."라고 말했고 언제든지 사용할 때마다 보증 할 수는 없지만 심각한 지연은 발견하지 못했습니다. 라이센스가 문제 일 수 있습니다.

2

이리스트 뷰를 사용하지 마십시오, 그것은이 많은 항목을 처리하기 위해 의미되지 않았으며 완벽한 성능은 성가 시게됩니다도 함께 사용자. 대신 자동 완성 텍스트 상자를 사용해보십시오.

+2

costumer는 이러한 견해를 요구했습니다. 그는 목록에있는 색인과 비슷한 응용 프로그램을 가지고 있습니다. 차이점은 유료 사용자는 아무 것도 입력하지 않고 색인에있는 내용을 볼 수 있지만 스크롤 만하면됩니다. –

+0

궁극적으로 당신이 말하는 것을해야하지만, 나는 여전히 그들 앞에 다른 옵션을 넣는 것이 좋습니다. 전체 화면 목록을 팝업으로 표시하는 모두 표시 버튼이있을 수 있습니다. (실제로, 나는 단지 프로젝트를 위해 그것을 할 것입니다.) –

0

listview 대신 목록 상자를 검사하여 속도가 빨라졌습니다! 전체 프로세스는 1 초 미만으로 소요되며 최소 30 배입니다.

2

ListView에 많은 항목을 표시해야하는 경우 ListView의 Virtual Mode을 사용하는 것이 가장 좋습니다. 이렇게하면 ListView는 표시되는 항목 만 표시합니다.

관련 문제