The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          當數據上到好幾萬多條時,要調用幾條數據在頁面顯現,ASP就會慢如蝸牛.最糟糕的是,當n多用戶打開頁面拜訪的時分,每個用戶每次都要讀取數據庫一次, 這無疑降低了效率,很明顯, 假如能把數據能保具有內存上,然后讀取,無疑放慢了速度.
          所謂緩存其實就是在內存中開辟一個用來保存數據的空間.
          使用緩存你就不必屢次的拜訪你保具有硬盤上的數據了,由于這些數據我們希望每個用戶都能看到成效一樣,考慮使用的是application對象,由于它是 一切拜訪者的共用的對象,存儲的消息和定義的事情能夠為一切者拜訪者使用,這里要使用asp內置對象application了.
          關于application:
          2個辦法[lock 和 unlock],
          2個集合[content 和 staticobjects],
          2個事情[開端的application_onstart 和 application_end]
          application變量不會由于用戶的分開而消失,一旦建立,不斷等到網站關閉和程序卸載為止,正由于如此,使用的時分要特別當心!,否則會占用內存 (虛擬主機提供商很不高興了).
          我們是把數據寫入一個自定義的application里面,在制定的工夫讀取刷新的,大致思緒就是這樣.

          實例演示.先建立一個簡單的數據庫,寫個function讀取一下,寫入一個dim變量temp中:

          程序代碼
          <%  Function DisplayRecords()
          '這個函數本來給一個變量temp付上記載的值
          Dim sql, conn, rs
          '符合條件的sql語句
          sql = "Select id, [szd_f], [szd_t] FROM admin"
          '打開數據庫連接
          Set conn = Server.CreateObject("ADODB.Connection")
          conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("db.mdb")
          Set rs = Server.CreateObject("ADODB.Recordset")
          rs.Open sql, conn, 1, 3
          '當符合sq語句l的數據沒有顯現完畢時
          If Not rs.EOF Then
          '給temp變量賦值
          Dim temp
          temp = "<table width=""90%"" align=""center"""
          temp = temp & " border=""1"" bordercolor=""silver"""
          temp = temp & " cellspacing=""2"" cellpadding=""0"">"
          temp = temp & "<tr bgcolor=""#CCDDEE""><td width=""5%"""
          temp = temp & ">ID</td><td>操作</td>"
          temp = temp & "<td>數值</td></tr>"
          While Not rs.EOF
          temp = temp & "<tr><td bgcolor=""#CCDDEE"">"
          temp = temp & rs("ID") & "</td><td>" & rs("szd_f")
          temp = temp & "</td><td>" & rs("szd_t")
          temp = temp & "</td></tr>"
          rs.MoveNext
          Wend
          temp = temp & "</table>"
          'temp賦值完畢,把它再前往給函數
          DisplayRecords = temp
          Else
          DisplayRecords = "Data Not Available."
          End If
          '開釋內存
          rs.Close
          conn.Close
          Set rs = Nothing
          Set conn = Nothing
          End Function %>

          ok,上面的函數改造完畢,調用的時分就是DisplayRecords.
          上面是application大顯本領了:

          程序代碼
          <%'該函數是寫入緩存
          Function DisplayCachedRecords(Secs)
          Dim retVal, datVal, temp1
          'Secs是每次要刷新數據的工夫, retVal是數據,datVal是剩余工夫
          retVal = Application("cache_demo") '獲得appliction的值
          datVal = Application("cache_demo_date") '獲得appliction的值
          '判別datVal 的值,也就是要計算工夫過來了沒
          If datVal = "" Then
          '假如是空,datVal值為當前工夫按秒加上secs定義的工夫
          datVal = DateAdd("s",Secs,Now)
          End If
          'temp1是判別當前工夫和datVal的秒差
          temp1 = DateDiff("s", Now, datVal)
          '假如retVal已經是上面函數的前往值且工夫大于0
          If temp1 > 0 And retVal <> "" Then
          '本函數前往記載數
          DisplayCachedRecords = retVal
          Response.Write "<b><font color=""green"">利用緩存讀取數據"
          Response.Write " ... (" & temp1 & " 秒剩余)</font></b>"
          Response.Write "<br><br>"
          Else
          'retVal 是空的話,就賦予DisplayRecords的值給變量temp2
          Dim temp2
          temp2 = DisplayRecords()
          '保存到Application.------------------>重點
          Application.Lock
          Application("cache_demo") = temp2
          Application("cache_demo_date") = DateAdd("s",Secs,Now)
          Application.UnLock
          DisplayCachedRecords = temp2
          ' 這里隨便寫上了記載的緩存的過來工夫,絕對總秒數倒差 :
          Response.Write "<b><font color=""red"">刷新緩存顯現 ..."
          Response.Write "</font></b><br><br>"
          End If
          End Function
          %>


          說明完畢.

          調用辦法:<%=DisplayCachedRecords(20)%>
          posted on 2010-05-27 11:44 Eric_jiang 閱讀(303) 評論(0)  編輯  收藏 所屬分類: ASP
          主站蜘蛛池模板: 宁国市| 荣昌县| 咸阳市| 烟台市| 盐山县| 临桂县| 伽师县| 宜昌市| 揭东县| 建平县| 长泰县| 多伦县| 江源县| 电白县| 武胜县| 岚皋县| 九龙城区| 绥芬河市| 威远县| 临洮县| 衡水市| 莎车县| 元氏县| 瑞安市| 新余市| 乌拉特前旗| 绍兴市| 孟村| 昭通市| 赤壁市| 怀仁县| 行唐县| 五指山市| 东宁县| 九龙城区| 龙泉市| 昂仁县| 库伦旗| 枞阳县| 广饶县| 纳雍县|