日期:2014-05-16  浏览次数:20842 次

初级问题:关于conn的释放
--------------------------------

代码如下

<!--#include file="conn.asp"-->

<%
id=request.form("id")
set rs=server.CreateObject("adodb.recordset") 
sqlstr="select * from table where id="&request.form("id")
rs.open sqlstr,conn,1,3
*
*
*
rs.update
rs.close
set rs=nothing
%>
<%
response.Redirect("edit.asp")
%>
<%
conn.close
set conn=nothing
%>


--------------------------------

1、在这种写法下,response.Redirect("edit.asp")直接就跳转到edit.asp,并未能执行conn.close
我搜索资料,看见说用户、并发多的话,这是一种资源浪费。
但是跳转回去edit.asp后,其实也要打开数据库,也就是重新打开conn。
跳转前打开的conn和跳转后的conn,计为2个吗?还是1个?
2、同样rs不关闭也是资源浪费?

------解决方案--------------------
关闭了再跳,跳过去要打开,再重新打开,用完再关闭
------解决方案--------------------
主要是conn和rs都是一个进程开一个的,IIS很弱,不会共用。tomcat有连接池,但也要显示返回。所以随手关闭是个好习惯。也可以include 页头页尾,在这里统一连接统一关闭,防忘记。
------解决方案--------------------
1 连接在每个页面打开,用完及时关闭,跳转前要关闭Set为Nothing,rs也是。不要用session等共享连接,会有100% CPU问题。
2 ODBC本身有连接池,一般不需要客户端去管理。这个和Web服务器无关。
------解决方案--------------------
最好关闭了才跳转。不然资源浪费。
------解决方案--------------------
完全可以conn.close之后再response.Redirect
不过如果网站结构不是很大的话,也可以不管conn,但是rs最好是随时close掉