簡體   English   中英

具有多個計時器的Windows服務

[英]Windows Service with multiple timers

在我目前的實習期間,我獲得了一名前實習生編寫的Windows服務,該實習監控存檔並通過電子郵件和彈出窗口警告特定人員,如果其中一個記錄值超出一定范圍。 它目前使用計時器每30秒檢查一次存檔,我被問到是否可以更新它以允許選擇時間,具體取決於所監視的“標記”。 它使用XML文件來跟蹤正在監視的標記。 在服務中創建多個計時器是最有效的方法嗎? 我不確定采取什么方法。

該服務使用.NET 3.5以C#編寫。

根據粒度,您可以使用單個計時器,它是所需時間間隔的公共因子。 假設他們想要放入XML文件,每隔幾分鍾就要檢查一次存檔。 你設置了一個每分鍾停一次的計時器,你可以檢查自從你完成每個計時器以來的持續時間以及是否這樣做。

如果您有機會重新構建,我會從服務轉移到一組計划任務。 寫它所以一個任務做一個存檔。 然后編寫一個控制器程序來設置計划任務(並且可以阻止它們,更改它們等).Windows 7上的計划任務的API很好且易懂,而且與服務不同,你可以施加限制,例如“不要這樣做”如果計算機處於電池狀態,“或”僅在計算機處於空閑狀態時執行此操作“以及如果錯過了運行任務的機會您應該采取的操作。 7或8個計划任務,每個都按照自己的計划,使用您的相同API,傳入存檔路徑和電子郵件地址,比一次嘗試處理所有內容的服務要簡潔得多。 此外,當您沒有其他自動啟動服務時,機器將啟動得更快。

高效? 可能不是 - 特別是如果你有很多標簽,因為每個計時器只需要很少但有限的資源。

另一種方法可能是每秒觸發一個計時器,當發生這種情況時,檢查未完成的請求列表。

如果出現問題,這樣可以更容易調試,因為只有一個活動線程。

但是,與大多數代碼維護情況一樣,這取決於您現有的代碼,您的能力以及您感覺更舒適的方式。

我建議只使用一個按最小公約數計划的計時器。

例如,將計時器配置為每秒發出信號,您可以通過計算相應的計時器滴答數來處理每個間隔(1秒,2秒......)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM