고전적인 ASP 응용 프로그램을 사용하는 클라이언트의 프로젝트를 진행하고 있습니다. 자신의 환경이 이전보다 훨씬 느리게 수행되고 있습니다. 다양한 다른 환경. 나는 많은 해결책을 가지고있다. 그러나 부진은 이전에 보지 못했던 것을 보게했습니다. 이것은 "아카드적인"질문 일뿐입니다. 내가 가진 카테고리 페이지를 이해하는 것이 궁금ADODB.Recordset의 .CacheSize/.PageSize를 사용하여로드 시간이 분산 됨
1800 개 제품 레코드를 모두 페이지 당 50 개의 제품을 표시하도록 설정하는 경우 54 말과 카테고리 페이지로로드 ~ 3 시간이 오래 걸리는 말한다. 즉, 반복 할 항목 수가 같을 때 전체 레코드 수의 차이가 상수 일 때 표시되는 제품 수를로드하는 데 차이가있는 이유는 무엇입니까? 여기
가 사용되는 방법, 본질적인 측면 추상화이다 :SELECT {tableA.fields} FROM tableA, tableB WHERE tableA.key = tableB.key AND {other refining criteria};
set rs=Server.CreateObject("ADODB.Recordset")
rs.CacheSize=iPageSize
rs.PageSize=iPageSize
pcv_strPageSize=iPageSize
rs.Open query, connObj, adOpenStatic, adLockReadOnly, adCmdText
dim iPageCount, pcv_intProductCount
iPageCount=rs.PageCount
If Cint(iPageCurrent) > Cint(iPageCount) Then iPageCurrent=Cint(iPageCount)
If Cint(iPageCurrent) < 1 Then iPageCurrent=1
if NOT rs.eof then
rs.AbsolutePage=Cint(iPageCurrent)
pcArray_Products = rs.getRows()
pcv_intProductCount = UBound(pcArray_Products,2)+1
end if
set rs = nothing
tCnt=Cint(0)
do while (tCnt < pcv_intProductCount) and (count < pcv_strPageSize)
{display stuff}
count=count + 1
loop
레코드 세트 getRows 통해 배열로 변환한다() 및 파괴; 표시된 레코드는 항상 iPageSize 이하가됩니다.
여기에 큰 문제는 다음과 같습니다 왜, 더 큰 레코드 세트 (~ 1800 개 기록)의 초기 페이지로드는 작은 기록보다는 페이지 크기를 통해 루프에 크게 이상 (예를 들어 50 개 레코드) 걸립니까 세트 (~ 54 레코드)? 어느 쪽이든 0에서 49까지 실행되지만 초기 레코드 set/getRows() 배열이 클수록 시간이 오래 걸립니다. 즉, 루프를 종료하기 전에 초기 레코드 set/getRows() 배열이 여전히 동일한 레코드 수/행을 반복 할 때 더 큰 경우 처음 50 개 레코드를 반복하는 데 시간이 오래 걸리는 이유는 무엇입니까?
MS SQL 서버 2008 R2 웹 에디션