Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays ADODB.Recordset中.CacheSize/.PageSize的加载时间差异_Arrays_Performance_Asp Classic_Recordset_Page Load Time - Fatal编程技术网

Arrays ADODB.Recordset中.CacheSize/.PageSize的加载时间差异

Arrays ADODB.Recordset中.CacheSize/.PageSize的加载时间差异,arrays,performance,asp-classic,recordset,page-load-time,Arrays,Performance,Asp Classic,Recordset,Page Load Time,我正在为一个客户开发一个项目,使用一个我非常熟悉的经典ASP应用程序,但是在他的环境中,它的运行速度比我在其他各种环境中看到的都慢。我有很多解决方案;然而,这种迟钝让我不得不去看一些我以前从未看过的东西——这更像是一个愚蠢的问题 我很想知道,当两个页面都设置为每页显示50个产品时,加载1800个产品记录的分类页面所需的时间是加载54个产品记录的分类页面所需时间的3倍。也就是说,当要循环的项目数相同时,为什么总记录数的差异会在加载显示的产品数时产生差异,而这是一个常量 以下是使用的方法,抽象到基本

我正在为一个客户开发一个项目,使用一个我非常熟悉的经典ASP应用程序,但是在他的环境中,它的运行速度比我在其他各种环境中看到的都慢。我有很多解决方案;然而,这种迟钝让我不得不去看一些我以前从未看过的东西——这更像是一个愚蠢的问题

我很想知道,当两个页面都设置为每页显示50个产品时,加载1800个产品记录的分类页面所需的时间是加载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,但初始记录集/getRows数组越大,执行此操作所需的时间就越长。也就是说,当初始记录集/getRows数组更大时,为什么在退出循环之前仍循环通过相同数量的记录/行时,循环通过前50条记录所需的时间更长


运行MS SQL Server 2008 R2 Web edition时,实际上并没有限制返回的记录数。加载36倍以上的记录需要更长的时间。您应该更改查询以直接限制记录,而不是检索所有记录并在前50个记录之后终止循环

试试这个:

选择* 从…起 选择*,按表格A排序的行号。键为RowNum 从表格 内连接表B 关于table a.key=table b.key 其中{其他优化条件}作为结果集 其中RowNum介于1和50之间

还要确保用于连接的列已编制索引