2011-11-10 21 views
4

我在當前實習中獲得了一位由前實習生編寫的Windows服務,該服務監視歸檔並通過電子郵件和彈出式窗口提醒特定人員,如果其中一個記錄值超出特定範圍。它目前使用定時器每30秒檢查一次存檔,並且我被問及是否能夠更新它以允許根據正在監視的「標籤」的時間來選擇時間。它使用XML文件來跟蹤哪些標籤被監控。在服務中創建多個定時器是否是實現此目的最有效的方法?我不確定採取什麼方法。帶有多個計時器的Windows服務

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

回答

2

根據粒度的不同,您可以使用單個計時器,這是他們想要的時間間隔的公因子。假設他們想要在每隔幾分鐘就要檢查一次每個檔案的XML文件。你設置了一個計時器,每分鐘一次,然後你檢查自從你做了每一件事以後是否這樣做。

如果您有機會重新設計架構,我將從服務轉移到一組計劃任務。把它寫下來,讓一個任務完成一個檔案。然後編寫一個控制器程序來設置計劃任務(並且可以阻止它們,改變它們等等).Windows 7上計劃任務的API非常好理解,與服務不同,您可以施加諸如「不要這樣做」的限制如果計算機使用電池「或」只有在機器閒置時才執行此操作「以及您的偏好,以便在錯過任務的機會時該怎麼做。 7或8個計劃任務,每個都按照他們自己的計劃,使用相同的API,傳遞存檔路徑和電子郵件地址,比一個嘗試一次處理所有內容的服務要簡單得多。另外,如果您沒有其他自動啓動服務,機器將啓動得更快。

+0

我一定會研究計劃任務的想法。由於3人使用一個普通的定時器說同一件事情,所以現在看來​​這可能是最好的路線。謝謝! – dwf

1

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

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

由於只有一個活動線程,因此如果出現問題,則可以更容易地進行調試。

然而,在大多數代碼維護情況下,它取決於您現有的代碼,您的能力以及您感覺如何更舒適。

1

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

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