国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP提高數據顯示效率-緩存探幽

2019-11-18 16:49:17
字體:
來源:轉載
供稿:網友

  寫在前面的話:此篇還是asp相關的,相信玩ASP的都有這個感覺,當數據有5萬多條時-------just like音樂網,要調用最新的10條在頁面顯示,糟糕的是,當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)%>

  寫在后面的話:如果你感覺你的服務器內存不夠大的話,不要大量使用緩存.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉山县| 贞丰县| 布拖县| 芜湖县| 沙河市| 安仁县| 定州市| 福鼎市| 军事| 海兴县| 兴业县| 习水县| 黑水县| 永善县| 炉霍县| 邵东县| 黄石市| 彰化县| 基隆市| 新密市| 太原市| 瑞金市| 若尔盖县| 芷江| 辽宁省| 和平县| 将乐县| 濮阳县| 沁水县| 芒康县| 饶阳县| 拉孜县| 天祝| 大足县| 五华县| 西丰县| 上栗县| 嘉荫县| 怀化市| 沈丘县| 桃江县|