欢迎光临
我们一直在努力

在ASP中改善动态分页的性能

建站超值云服务器,限时71元/月

from computerworld

在asp中改善动态分页的性能

人民银行济南分行清算中心 张立锋

山东省水利科学研究院 张 禾 

——————————————————————————–

概 述

—- 现在有不少介绍利用asp实现动态分页的文章,方法大同小异,就是每次利用ado返回原始数据满足条件记录集中的指定页。但在实际工程应用中,原始数据量通常很大,原始数据的加工比较慢,如果每次换页原始数据都要加工一次,则会严重影响应用程序运行的性能。

—- 解决上述问题主要有两种途径:一种途径是将查询条件相对固定,利用相对固定的查询条件对原始数据进行加工,生成一个小数据量的中间库,每次查询都对中间库进行操作。这样虽然会提高程序的性能,但会影响程序的灵活性,而且 server端还需定时对原始数据进行加工维护。另一个途径是在server端保存查询的结果。这样虽然不能改善查询的性能,但client端换页时server端能够很快响应。第一种途径的实现比较简单,本文介绍第二种途径的实现方法。

实现方法

—-将server端的查询结果保存在一个动态数组中,即在 session_onstart过程中声明一个二维的动态数组。当server端收到client端提交的申请后,首先判断申请是条件查询还是换页,如是条件查询则判别查询条件是否与上次提交的查询条件不同,如不同则执行查询,将查询结果保存在该数组中,然后向client端返回第一页的内容,否则直接从该数组中返回相应页的内容。

程序实现

—-1.定义二维数组及其他变量

sub session_onstart

dim tempdb()

redim preserve tempdb(1,2)

session(“storedarray") = tempdb

’定义一个session数组

session(“ipagecount")=0

session(“ipageno")=0

……

end sub

—-2.调用存储过程返回数据

sub getrecordset(strbbmc,strkssj ,

strzzsj ,strnodecode ,strfxzl )

参数为报表名称和各个限制条件

select case strbbmc

case “交易汇总表"

strcnn=“provider=msdasql;dsn=sqldb;

uid=sa;pwd=123456;database=vlog;"

set objcnn=server.createobje(“adodb.connection")

objcnn.commandtimeout = 9999999

objcnn.connectiontimeout = 99999999

objcnn.cursorlocation = aduseclient

objcnn.open strcnn 打开连接

set objrs =server.createobject

(“adodb.recordset")

objrs.pagesize = ipagesize

objrs.cachesize = ipagesize

objrs.open “sszhatmlog ‘“ & strkssj & " ,

‘“ & strzzsj & ", ‘“ & strnodecode & " ,

‘“ & strfxzl & "",objcnn,adopenstatic ,

adlockreadonly,1

’执行存储过程返回查询结果

……

end sub

—-3.将查询结果保存到动态数组

sub saverecordset()

if objrs.eof = false then

objrs.movelast

session(“irowcount") = objrs.recordcount

session(“ifieldcount") = objrs.fields.count

session(“ipagecount") = objrs.pagecount

redim preserve temparray(session

(“irowcount"),session(“ifieldcount"))

’temparray是一个二维动态数组,

根据记录集大小重新定义其大小

objrs.movefirst

icount=0

do while objrs.eof=false

icount = icount + 1

for i= 1 to session(“ifieldcount")

temparray(icount,i)=objrs.fields.item

(i-1).value

next

objrs.movenext

loop

session(“storedarray") = temparray

objrs.close

else

session(“ipagecount") = 0

end if

end sub

—-4.显示记录内容

sub showrecord()

……

localarray=session(“storedarray")

ishowtotal=(ipagecurrent-1)*ipagesize+1

irowloop = 1

do while irowloop < = ipagesize and ishowtotal

< = session(“irowcount")

response.write(“< tr >")

for i = 1 to session(“ifieldcount")

response.write(“< td >"

& localarray(ishowtotal,i)) next

response.write(“< /tr >")

ishowtotal = ishowtotal + 1

irowloop = irowloop + 1 loop

response.write(“< /table >")

if ipagecurrent < > 1 and

ipagecurrent < session

(“ipagecount") then

% >

< center >< a href=“db_pag.asp?page=< %=

ipagecurrent - 1 % >" >前一页< /a >< a href=

“db_pag.asp?page=< %= ipagecurrent + 1 % >" >

后一页< /a >< /center >

< %

else

if ipagecurrent < > 1 then

% >

< center >< a href=“db_pag.asp?page=< %=

ipagecurrent - 1 % >" >前一页 < /a >< /center >

< %

end if

if ipagecurrent < session(“ipagecount")then

% >

< center >< a href=“db_pag.asp?page=

< %= ipagecurrent + 1 % >" >后一页 < /a >

< /center >

< %

end if

end if

end sub

—-5.主程序

if request.querystring(“page") = “" then

’提交查询申请并且查询条件与上一次不同

……

call getrecordset(strbbmc,strkssj,strzzsj,

strnodecode,strfxzl)

call saverecordset

else

ipagecurrent=cint(request.querystring(“page"))

strkssj=session(“strkssj")

end if

if session(“ipagecount") = 0 then

response.write “抱歉!没有满足条件的记录"

response.write “< br >"

else

call showrecord()

end if

结束语

—-本程序的关键在于session数组的定义及其赋值的实现,通过应用session数组可以提高处理大量数据的应用程序的性能。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在ASP中改善动态分页的性能
分享到: 更多 (0)