2011-01-05 5 views
0

쉐어 포인트 문서 라이브러리의 항목 수를 프로그램 적으로 계산하려고합니다. 내가 작업하고있는 규모는 30-70000 품목입니다. 카운트를 표시하기 위해 smartpart에 usercontrol이 있습니다. 우리 사이트는 TEAM 사이트입니다.큰 쉐어 포인트 목록의 항목 수를 가장 빨리 얻는 방법

  SPList VoulnterrList = web.Lists[ListTitle]; 

      SPQuery query = new SPQuery(); 

      query.ViewAttributes = "Scope=\"Recursive\""; 
      string queries = "<Where><Eq><FieldRef Name='ApprovalStatus' /><Value Type='Choice'>Pending</Value></Eq></Where>"; 
      query.Query = queries; 
      SPListItemCollection lstitemcollAssoID = VoulnterrList.GetItems(query); 
      lblCount.Text = "Total Proofs: " + VoulnterrList.Items.Count.ToString() + " Pending Proofs: " + lstitemcollAssoID.Count.ToString(); 

문제는이이 페이지를로드하는 데 75 초 80에 걸리는 심각한 성능 문제를 가지고 있습니다 :

은 총 수를 얻을 수있는 코드입니다. 우리가이 페이지를 언급하면로드는 4 초가됩니다. 이 문제

우리의 운명에 대한 더 나은 approch은 셰어 포인트 2007

답변

3

대신 사용 VoulnterrList.Items.CountVoulnterrList.ItemCount입니다.

List.Items를 사용하면 목록의 모든 항목이 콘텐츠 데이터베이스에서로드됩니다. 실제로 우리는 카운트를 얻기 위해 항목을 필요로하지 않으므로 오버 헤드가 낭비됩니다.

이렇게하면 8 번째 줄의 성능이 개선되지만 9 번째 줄에는 여전히 쿼리의 결과에 따라 문제가있을 수 있습니다.

+0

예 쿼리 결과에는 약 600 개의 항목이 있지만 목록에는 62000 개의 항목이 있습니다. – sooraj

+0

@ sooraj : 문제가 있습니까? –

+0

아니 아니, 내가 그것을 구현합니다, 내가 ur 이전의 코멘트에 응답했다. – sooraj

0

현재 두 개의 최적화 작업을 수행 할 수 있습니다

  • 가 있도록 CAML 쿼리의 <ViewFields> 섹션에서 해당 열을 사용하여 목록

  • 의 열 중 하나에 인덱스를 작성 해당 인덱스 컬럼 검색됩니다.

속도가 빨라집니다. 열에 인덱스를 만드는 방법에 대한이 기사를 참조하십시오. http://sharepoint.microsoft.com/Blogs/GetThePoint/Lists/Posts/Post.aspx?ID=162

+0

우리는 이미 해당 열에 대한 색인을 만들었습니다 – sooraj

+0

다른 하나를 시도합니다 – sooraj

+1

나는 그렉의 대답에도 동의합니다 .... –

관련 문제