正 文:
很多站长写程序时,对于已经打开的对象,数据库连接,总是不冷不热,不及时关闭;孰知,系统资源就是这样的被消耗殆尽,导致程序假死,失去响应;尤其对于 response.redirect 转向语句 前后关闭对象、连接,更是模糊不清。
flymorn以实际测试为例子,以用于一个网站
重庆租房网的调试:请注意:response.redirect 后所有的语句都不会执行,可以测试如下:
<%
response.redirect "http://www.023ff.com"
dim fso,fout
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath("我被执行啦.txt"))
fout.close
%>
上面这段代码执行后,同目录下将不会出现《我被执行啦.txt》这个文件;如果把response.redirect这行注释掉,就会出现了。这很好的证明了我的想法。
对于这个问题的处理方法,可以如下处理:
把response.redirect 语句放最后,中间采用标志符:
<%
...
if (...) then
zz=1 '标志符置位
else
...
end if
''这里写上关闭对象|数据库连接的语句
'转向在这里
if zz=1 then '这句放最后
response.redirect "http://www.023ff.com"
resposne.end
end if
%>
对于 js 采用的判断跳转,则不影响其后的执行,如:
<%
response.write "<SCRIPT language=JavaScript>alert('返回!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
'response.end '但是如果有这行,则后面的语句不执行
dim fso,fout
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath("我被执行啦.txt"))
fout.close
%>
是的,页面转移前救得关闭
我常把打开和关闭写成函数,调用时候打开,不用时就关闭
的确是这样的 楼主说得很好,转移页面的命令前必须关闭数据库连接等对象.但是中间采用标志符的方法可不可以再说详细点呢?
我觉得其实不必做那么复杂 其实可以在response.redirect语句之前就关闭数据库连接;如果response.redirect语句在 IF 语句中,那么:
Set conn=Server.CreateObject....'数据库连接语句
IF..... then
conn.close '关闭连接
set conn=nothing '清空
response.redirect...
end if
conn.close '关闭连接
set conn=nothing '清空
上面的代码,如果要转移页面,那么程序会在转移之前关闭连接;如果不执行转移页面,那么在退出 IF 语句后,会关闭数据库连接.
这是我的看法,清多指教
lynda:程序实现的方法是多样的,程序是死的,但人是活人嘛。