选择显示字体大小

在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数组可以提高处理大量数据的应用程序的性能。
  
  
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons