商業源碼熱門下載www.html.org.cn
我在實驗中發現在 asp.net 中可以使用計時器(timer)完成一些定時動作。這一點可能會對我們的一些 web 程序有益。
下面首先介紹我測試使用的一個例子:
首先在 global.asax 中的 application_onstart 事件過程中定義計時器,代碼如下:
[vb.net] global.asax
<%@ import namespace="system.timers" %> 
<script runat="server"> 
   sub application_onstart(sender as object, e as eventargs) 
       ' 創建一個計時器,單位:毫秒
       dim atimer as new system.timers.timer(10000)
       ' 將 fresher 指定為計時器的 elapsed 事件處理程序 
       addhandler atimer.elapsed, addressof fresher 
       ' autoreset 屬性為 true 時,每隔指定時間循環一次; 
       ' 如果為 false,則只執行一次。 
       atimer.autoreset = true 
       atimer.enabled = true 
         
       ' 先給 application("timestamp") 指定一個初值 
       application.lock() 
       application("timestamp") = datetime.now.tostring() 
       application.unlock() 
   end sub 
   sub fresher(sender as object, e as elapsedeventargs) 
       application.lock() 
       application("timestamp") = datetime.now.tostring() 
       application.unlock() 
   end sub 
</script>
 
然后我們簡單寫一個 test.aspx 來查看 application("timestamp") 的值。代碼如下:
[vb.net] test.aspx
<% 
    response.write(application("timestamp")) 
%>
 
分析:
根據 global.asax 中的代碼,我們設定了一個計時器,每隔 10 秒鐘執行一次 fresher() 過程;在 fresher() 過程中我們事實上只是重新寫入了一個 application("timestamp") 新值。換句話說,application("timestamp") 的值是應該每隔 10 秒鐘更新一次的。
是不是這樣的呢?通過 test.aspx 的反復刷新觀察 application("timestamp") 的值,的確發現這個值在每隔 10 秒地變化一次,而其他時候則保持不變。與我們的預期是一致的。
意義:
通過引入計時器我們可以在 asp.net 的全局性程序(application)中靈活的使用計時器完成一些定時操作,比如:在社區/論壇系統中,每隔 5 分鐘更新一次在線用戶列表,每隔 1 個小時更新一次用戶經驗值,或者每隔一天備份一次關鍵數據等等。這個思路應該是很誘人的。
探討:
q: 是否在 asp.net 代碼的任何地方都可以使用計時器呢?
a: 我沒有測試過在普通 *.aspx 中插入計時器的情形。但從 b/s 程序的特點來看,即使在 *.aspx 中插入計時器可行,也不是一種好的選擇。因為對于 b/s 程序來說,服務器接到客戶端的請求本身就是一個事件,在這個事件處理過程中,服務器必須迅速的作出回應,為客戶端產生相應的 html 代碼,然后結束這一過程。如果在 *.aspx 使用計時器(如果允許的話),則第一沒有太大必要,第二很容易使系統因為插入的計時器過多(因為每一次 *.aspx 的執行都有可能插入一個新的計時器)而使系統癱瘓。
因此,我建議只在 global.asax 的 application_onstart 中使用比較安全一些。歡迎對此感興趣的朋友對此發表見解。
新聞熱點
疑難解答
圖片精選