我在實(shí)驗中發(fā)現在 ASP.NET 中可以使用計時(shí)器(Timer)完成一些定時(shí)動(dòng)作。這一點(diǎn)可能會(huì )對我們的一些 Web 程序有益。
下面首先介紹我測試使用的一個(gè)例子:
- 首先在 global.asax 中的 Application_OnStart 事件過(guò)程中定義計時(shí)器,代碼如下:
| [VB.NET] global.asax <%@ import Namespace="System.Timers" %> <script runat="server"> Sub Application_OnStart(sender As Object, e As EventArgs) ‘ 創(chuàng )建一個(gè)計時(shí)器,單位:毫秒 Dim aTimer As New System.Timers.Timer(10000) ‘ 將 Fresher 指定為計時(shí)器的 Elapsed 事件處理程序 AddHandler aTimer.Elapsed, AddressOf Fresher ‘ AutoReset 屬性為 true 時(shí),每隔指定時(shí)間循環(huán)一次; ‘ 如果為 false,則只執行一次。 aTimer.AutoReset = True aTimer.Enabled = True ‘ 先給 Application("TimeStamp") 指定一個(gè)初值 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> |
- 然后我們簡(jiǎn)單寫(xiě)一個(gè) test.aspx 來(lái)查看 Application("TimeStamp") 的值。代碼如下:
| [VB.NET] test.aspx <% Response.Write(Application("TimeStamp")) %> |
分析:
根據 global.asax 中的代碼,我們設定了一個(gè)計時(shí)器,每隔 10 秒鐘執行一次 Fresher() 過(guò)程;在 Fresher() 過(guò)程中我們事實(shí)上只是重新寫(xiě)入了一個(gè) Application("TimeStamp") 新值。換句話(huà)說(shuō),Application("TimeStamp") 的值是應該每隔 10 秒鐘更新一次的。
是不是這樣的呢?通過(guò) test.aspx 的反復刷新觀(guān)察 Application("TimeStamp") 的值,的確發(fā)現這個(gè)值在每隔 10 秒地變化一次,而其他時(shí)候則保持不變。與我們的預期是一致的。
意義:
通過(guò)引入計時(shí)器我們可以在 ASP.NET 的全局性程序(Application)中靈活的使用計時(shí)器完成一些定時(shí)操作,比如:在社區/論壇系統中,每隔 5 分鐘更新一次在線(xiàn)用戶(hù)列表,每隔 1 個(gè)小時(shí)更新一次用戶(hù)經(jīng)驗值,或者每隔一天備份一次關(guān)鍵數據等等。這個(gè)思路應該是很誘人的。
探討:
Q: 是否在 ASP.NET 代碼的任何地方都可以使用計時(shí)器呢?
A: 我沒(méi)有測試過(guò)在普通 *.aspx 中插入計時(shí)器的情形。但從 B/S 程序的特點(diǎn)來(lái)看,即使在 *.aspx 中插入計時(shí)器可行,也不是一種好的選擇。因為對于 B/S 程序來(lái)說(shuō),服務(wù)器接到客戶(hù)端的請求本身就是一個(gè)事件,在這個(gè)事件處理過(guò)程中,服務(wù)器必須迅速的作出回應,為客戶(hù)端產(chǎn)生相應的 HTML 代碼,然后結束這一過(guò)程。如果在 *.aspx 使用計時(shí)器(如果允許的話(huà)),則第一沒(méi)有太大必要,第二很容易使系統因為插入的計時(shí)器過(guò)多(因為每一次 *.aspx 的執行都有可能插入一個(gè)新的計時(shí)器)而使系統癱瘓。
因此,我建議只在 global.asax 的 Application_OnStart 中使用比較安全一些。歡迎對此感興趣的朋友對此發(fā)表見(jiàn)解。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。