加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

查看示例asp 从内存中读取数据

发布时间:2023-10-21 13:43:01 所属栏目:Asp教程 来源:
导读:从文件读数据,要比直接从数据库快,测试读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒,下例为使用文件缓存的代码 使用方法,在需要使用文件缓存的页面加入下列代码, <!--#include file="FileCatc

从文件读数据,要比直接从数据库快,测试读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒,下例为使用文件缓存的代码  

使用方法,在需要使用文件缓存的页面加入下列代码, 

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

<% 

Set MyCatch=new CatchFile 

MyCatch.Overdue=10     ’修改过期时间设置为10分钟 

if MyCatch.CatchNow(Rev) then 

        response.write MyCatch.CatchData 

        response.end 

end if 

set MyCatch=nothing 

 

%> 

FileCatch.asp 

复制内容到剪贴板代码: 

<% 

’ 本文件用于签入原始文件,实现对页面的文件Catch 

’ 1、如果文件请求为POST方式,则取消此功能 

’ 2、文件的请求不能包含系统的识别关键字 

Class CatchFile 

        Public Overdue,Mark,CFolder,CFile ’定义系统参数 

        Private ScriptName,ScriptPath,ServerHost ’定义服务器/页面参数变量 

        Public CatchData        ’输出的数据 

        Private Sub Class_Initialize        ’初始化函数 

                ’获得服务器及脚本数据 

                ScriptName=Request.Servervariables("Script_Name") ’识别出当前脚本的虚拟地址 

                ScriptPath=GetScriptPath(false)        ’识别出脚本的完整GET地址 

                ServerHost=Request.Servervariables("Server_Name") ’识别出当前服务器的地址

                ’初始化系统参数 

                Overdue=30        ’默认30分钟过期 

                Mark="NoCatch"        ’无Catch请求参数为 NoCatch 

                CFolder=GetCFolder        ’定义默认的Catch文件保存目录 

                CFile=Server.URLEncode(ScriptPath)&".txt"        ’将脚本路径转化为文件路径 

                CatchData="" 

        end Sub 

        Private Function GetCFolder 

                dim FSO,CFolder 

                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象 

                CFolder=Server.MapPath("/")&"/FileCatch/" 

                if not FSO.FolderExists(CFolder) then 

                        fso.CreateFolder(CFolder) 

                end if 

                if Month(Now())<10 then 

                        CFolder=CFolder&"/0"&Month(Now()) 

                else 

                        CFolder=CFolder&Month(Now()) 

                end if 

                if Day(Now())<10 then 

                        CFolder=CFolder&"0"&Day(Now())

 else 

                        CFolder=CFolder&Day(Now()) 

                end if 

                CFolder=CFolder&"/" 

                if not FSO.FolderExists(CFolder) then 

                        fso.CreateFolder(CFolder) 

                end if 

                GetCFolder=CFolder 

                set fso=nothing 

        End Function 

        Private Function bytes2BSTR(vIn)        ’转换编码的函数 

                dim StrReturn,ThisCharCode,i,NextCharCode 

                strReturn = "" 

                For i = 1 To LenB(vIn) 

                        ThisCharCode = AscB(MidB(vIn,i,1)) 

                        If ThisCharCode < &H80 Then 

                                strReturn = strReturn & Chr(ThisCharCode) 

                        Else 

                                NextCharCode = AscB(MidB(vIn,i+1,1)) 

                                strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

                                i = i + 1 

                        End If 

                Next 

                bytes2BSTR = strReturn 

        End Function 

        Public Function CatchNow(Rev)        ’用户指定开始处理Catch操作 

                if UCase(request.Servervariables("Request_Method"))="POST" then 

                ’当是POST方法,不可使用文件Catch 

                        Rev="使用POST方法请求页面,不可以使用文件Catch功能" 

                        CatchNow=false 

                else 

                        if request.Querystring(Mark)<>"" then 

                        ’如果指定参数不为空,表示请求不可以使用Catch

 Rev="请求拒绝使用Catch功能" 

                                CatchNow=false 

                        else 

                                CatchNow=GetCatchData(Rev) 

                        end if 

                end if 

        End Function 

        Private Function GetCatchData(Rev)        ’读取Catch数据 

                Dim FSO,IsBuildCatch 

                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile 

                If FSO.FileExists(CFolder&CFile) Then 

                        Dim File,LastCatch 

                        Set File=FSO.GetFile(CFolder&CFile)        ’定义CatchFile文件对象

                        LastCatch=CDate(File.DateLastModified) 

                        if DateDiff("n",LastCatch,Now())>Overdue then 

                        ’如果超过了Catch时间 

                                IsBuildCatch=true 

                        else 

                                IsBuildCatch=false 

                        end if 

                        Set File=Nothing 

                else 

                        IsBuildCatch=true 

                End if 

                If IsBuildCatch then 

                        GetCatchData=http://www.code-123.com/html/BuildCatch(Rev)        ’如果需要创建Catch,则创建Catch文件,同时设置Catch的数据 

                else 

                        GetCatchData=http://www.code-123.com/html/ReadCatch(Rev)        ’如果不需要创建Catch,则直接读取Catch数据 

                End if 

                Set FSO=nothing

 End Function 

        Private Function GetScriptPath(IsGet)        ’创建一个包含所有请求数据的地址 

                dim Key,Fir 

                GetScriptPath=ScriptName 

                Fir=true 

                for Each key in Request.QueryString 

                        If Fir then 

                                GetScriptPath=GetScriptPath&"?" 

                                Fir=false 

                        else 

                                GetScriptPath=GetScriptPath&"&" 

                        end if 

                        GetScriptPath=GetScriptPath&Server.URLEncode(Key)&"="&Server.URLEncode(Request.QueryString(Key))

                Next 

                if IsGet then 

                        If Fir then 

                                GetScriptPath=GetScriptPath&"?" 

                                Fir=false 

                        else 

                                GetScriptPath=GetScriptPath&"&" 

                        end if 

                        GetScriptPath=GetScriptPath&Server.URLEncode(Mark)&"=yes" 

                end if 

        End Function 

        ’创建Catch文件 

        Private Function BuildCatch(Rev) 

                Dim HTTP,Url,OutCome 

                Set HTTP=CreateObject("Microsoft.XMLHTTP") 

’                On Error Resume Next 

’                response.write ServerHost&GetScriptPath(true) 

                HTTP.Open "get","http://"&ServerHost&GetScriptPath(true),False 

                HTTP.Send 

                if Err.number=0 then 

                        CatchData=http://www.code-123.com/html/bytes2BSTR(HTTP.responseBody)

  BuildCatch=True 

                else 

                        Rev="创建发生错误:"&Err.Description 

                        BuildCatch=False 

                        Err.clear 

                end if 

                Call WriteCatch 

                set HTTP=nothing 

        End Function 

        Private Function ReadCatch(Rev) 

                ReadCatch=IReadCatch(CFolder&CFile,CatchData,Rev) 

        End Function 

        Private Sub WriteCatch 

                Dim FSO,TSO 

                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile 

                set TSO=FSO.CreateTextFile(CFolder&CFile,true) 

                TSO.Write(CatchData) 

                Set TSO=Nothing 

                Set FSO=Nothing 

        End Sub 

End Class 

Function IReadCatch(File,Data,Rev) 

        Dim FSO,TSO 

        Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile 

’        on error resume next 

        set TSO=FSO.OpenTextFile(File,1,false) 

        Data=http://www.code-123.com/html/TSO.ReadAll 

        if Err.number<>0 then 

                Rev="读取发生错误:"&Err.Description 

                ReadCatch=False 

                Err.clear 

        else 

                IReadCatch=True 

        end if 

        Set TSO=Nothing 

        Set FSO=Nothing 

End Function 

%>

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章