存档
经常用asp的同行,可能会建议用set rs=conn.execute(sql)来代替set rs=server.createobject(“ADODB.recordset”):rs.open conn,sql,1,1。还有一些同行更提出了用set rs=conn.execute(sql):res=rs.getRows(100)来优化ASP程序。其实在没有做此实验前,我也是很相信这种方法的。实际效果果真如此吗?经过一番测试,我发现结果远非如此,set rs=server.createobject(“ADODB.recordset”)的方法比set rs=conn.execute的方法快4~5倍。这个结果您信吗?不信,更我来一起做这个测试。猫七(苗启源)博客首发,转载请注明出处,原文地址: (http://www.miaoqiyuan.cn/p/conn-execute_rs-getrows)。
数据说明真相。首先创建一个多记录的数据库。
set conn=createobject(“adodb.connection”)
conn.open “provider=microsoft.jet.oledb.4.0;data source=E:\labs\miaoqiyuan.cn\g.mdb”
do while conn.execute(“select count(id) from site”)(0)<1000000
conn.execute(“insert into site(sitename,siteadmin,siteurl,sitekey) values(‘苗启源’,'http://localhost/app_login/’,'http://www.miaoqiyuan.cn’,'e10adc3949ba59abbe56e057f20f883e’)”)
loop
经过几个小时的运行,我得到了一个有63万多条记录的数据库。数据库大小为99.7MB(测试数据库下载地址http://www.miaoqiyuan.cn/products/rs-execute-test.rar)。
为了保证数据的真实性,我们用公共的头部header.asp来保存数据库连接字符串。footer.asp来保存运行时间。
运行环境,Windows 2003 Server SP2。IIS6.0,CPU E2200 2.2GHz,内存2Gx2。硬盘300G SATA+80G ATA。
公共头部:header.asp
< %
startTme=timer()
set conn=server.createobject("ADODB.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("g.mdb")
%>
[...]
本文原文地址为:http://miaoqiyuan.cn/p/asp-response-write-xiaolv/,转载请注明出处。
在网上看到一篇Response.write 的效率的文章,很久了,地址已经找不到了,大约说的是Response.write每行输出很慢,如果改成字符串会好一些。今天正好是星期天。有空来试验一下,看看到底对不对。
测试平台:Windows2003 SP2补丁 IIS6.0
机器配置:Intel E430 CPU(赛扬)
测试内容:
模拟一个网页输出的类,使用其Header方法,通过用函数连接的方式(Header2)连接字符串用Response.write输出,直接连接的方式(Header1)连接用Response.write输出,Response.write直接输出的方法,各执行500000次,对比运行结果。
测试代码:
见附件一
试验难题:
如果各执行500000,恐怕执行很慢,如果在浏览器中打开,恐怕将会直接导致浏览器崩溃、IIS恐怕也会崩溃。
解决方法:
1.将执行次数改为10000次。
2.用VBS脚本模拟浏览器请求,将结果保存到一个文本文件。代码见附件二
3.用{VBS脚本模拟浏览器请求的脚本的文件名}.vbs>1.txt直接将结果输出到1.txt
试验结果:
得到一个大约11.3MB的文本文件,
Header1(输出直接连接字符串):437.5
Header2(输出函数连接字符串):703.125
[...]
在老四(http://www.0097.org/laos/)的博客上看到一电子钢琴,下边还有千千阙听的曲子,想马上弹奏一曲,好累啊,音调好像也不对,写了一个VBScript的脚本,给他留了言。结果该文章不显示了,提示找不到文件
Windows虚拟主机的悲哀啊,因为网页中有了Wscript脚本,结果被主机非屏蔽了,或说被杀毒软件Killer了,以前用Win主机生成的时候也出现过这种问题,真的不是故意的,再次像老四抱歉。
下面是老四的键盘钢琴
下面保存为vbs,运行后,打开本页面即可用该脚本模拟键盘按键,听到千千阙听
Sub start
‘每个空格代表演示1000毫秒,两个按键间隔400毫秒
‘童话
‘keys="LONOL LONOL LONO OOMMLL ONOL LQPPO LONOM MMOTS PPRRQQ QQNPOONO ONOR LSRQPPPRRQQ QQVUTUV VPOT TTSSSLSRQQRQ QRQ RQPOOQST TTSPPRQ OQST TTSPPRQRQPO PQMMOONO"
‘心语心愿
‘keys="TVUTSTQ TSTVUVUTUV VWXXXXW VUTUS TVUTST QSTXWVUV VUTTTTSSTQSSTXWVUVV VUTTSUT"
‘会呼吸的痛
‘keys="STVTXXTW WWVUVWXWSV VUTUVRRRVVWVSSS SYXWXX STVTXXTW WWVUVWXWSVVVUTUVRRRVVWVSSS STUVVUVV"
‘欢乐颂
‘keys="J J K L L K J I H H I J J I IJ [...]
朋友手中有上千个域名,现在cn域名续费涨价了,准备抛弃一些。让我帮忙写个小程序来筛选一下,看看那个有留下的价值。当时我放出大话,20分钟搞定。最初设想的是生成Excel文件,通过Excel中的筛选来统计。
代码如下(附件包中的excel.vbs):
‘域名统计程序,生成excel结果
‘通过VBS获取当前目录,替代ASP中的Server.Mappath
Function Mappath(v)
Mappath=fso.getAbsolutePathName(v)
End Function
‘写得一个函数,用于判断字符串中是否含有数字。
Function iszajiao(v)
for i=1 to len(v)
if isnumeric(mid(v,i,1)) then
iszajiao=1
exit for
end if
next
End Function
‘创建一个FSO对象
Set fso=CreateObject("Scripting.FileSystemObject")
‘判断是否有生成的Excel结果ok.xls,如果有,则删除
if fso.fileexists(mappath("ok.xls")) then fso.getfile(mappath("ok.xls")).delete
‘创建一个ok.xls
set fto=fso.createtextfile(mappath("ok.xls"),2)
wscript.echo "吴哥哥,请稍等,我正在为您工作中。。。"
fto.writeline "域名 后缀 位数 类型"
‘寻找当前目录中的所有txt文件,如果有则依次打开
for each file in fso.getfolder(mappath(".")).files
if Lcase(fso.getExtensionName(file))="txt" then
set db=fso.opentextfile(file,1)
‘如果不是在txt文件的结尾,则循环读取
do while not db.atendofstream
rs=db.readline
‘获取域名的位数,即第一次出现.的位置-1
ws=cint(instr(rs,".")-1)
‘防止本行数据为空行
if ws>=1 then
rsi=rsi+1
‘获取域名
ym=left(rs,ws)
‘获取域名后缀
hz=replace(rs,ym&".","")
‘分析域名类型,如果ym为数字则为数字
if isnumeric(ym) then
lx="数字"
‘否则,如果出现数字则为杂交
elseif iszajiao(ym)=1 then
lx="杂交"
‘其他类型就剩下字母了
else
lx="字母"
end if
‘输出
fto.writeline ym&" "&hz&" "&ws&" "&lx
end if
loop
end if
next
fto.close
set fto=nothing
msgbox "吴哥哥,我帮你完成工作了,怎么谢我呢?请我吃MM吧"
正准备邀功请赏的时候,朋友竟然说没用过Excel,狂吐血,并且还不想用数据库。这儿就有点复杂了,初步设想生成HTML文件,然后把数据保存到数组中,根据Select的选项来现在最终结果。
我是从两个方便考虑的,生成网页部分由Javascript控制,这些Javascript最终代码由VBScript来生成。
[...]
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>FileList with VBScript&Javascript</title>
<script type="text/vbscript">
on error resume next
Function Mappath(v)
Mappath=fso.getAbsolutePathName(v)
End Function
Function getPath(style,path)
pathlist="<select style=""float:left;"&style&""" ondblclick=""javascript:FileMan(this.value)"">"
if path="" or not fso.folderexists(path) then
pathlist=pathlist+"<option value="""">我的电脑</option>"
for each xx in fso.drives
pathlist=pathlist&"<option value="""&xx&""">"&xx&"\</option>"
next
else
set fpo=fso.getfolder(path)
‘pathlist=pathlist&"<option value="""&path&""">当前目录==>"&path&"</option>"
if len(path)>3 then
pathlist=pathlist&"<option value="""&fpo.parentfolder&""">..</option>"
else
pathlist=pathlist&"<option value="""">我的电脑</option>"
end if
for each xx in fpo.subfolders
if i=0 then x=" selected" else x=""
i=1
pathlist=pathlist&"<option value="""&xx&""" title="""&xx&""""&x&">"&xx&"</option>"
next
pathlist=pathlist&"</select><select style=""float:left;"&style&""" ondblclick=""javascript:openFile(this.value);"">"
for each xx in fpo.files
if i=0 then x=" [...]
请保存为VBS文件
今天写完这篇,打开发现卡巴报病毒,汗,不知道的还以为我挂马~
下面代码需要将“。”替换成“.”,“””替换成““”(英文的双引号)
‘ASP图片小偷,批量下载格力全部图片
‘Design By Miaoqiyuan。cn
function getHTTPPage(url)
dim Http
set Http=createobject(”MSXML2。XMLHTTP”)
Http。open ”GET”,url,false
Http。send()
if Http。readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http。responseBody,”GB2312”)
set http=nothing
if err。number<>0 then err。Clear
end function
Function BytesToBstr(body,Cset)
dim objstream
set objstream = CreateObject(”adodb。stream”)
objstream。Type = 1
objstream。Mode [...]