Dot-Net

我可以創建多少個 System.Timers.Timer 實例?我可以擴展多遠?

  • March 15, 2021

我有一個應用程序,它使用System.Timers.Timer對象來執行過期和電子郵件通知等。目前系統同時有幾百個定時器,但我們將擴大應用程序的使用範圍,這個數字可能會開始擴展到數千個(可能不超過 10,000 個)。

我找不到任何有關擴大計時器數量的資訊,所以我認為這不會成為問題。有誰知道這是否會成為一個問題,我應該主動考慮改變我處理到期的方式嗎?

我知道,這有點晚了,但是。. .

System.Timers.Timer是 .NET 的System.Threading.Timer包裝器,它又是 Windows 的Timer Queues的 .NET 包裝器。定時器隊列定時器是非常輕量級的——使用很少的系統資源。我沒有擴展到數千個定時器,但數百個定時器工作得很好。根據我對實現的了解,我無法想像成千上萬的計時器會有任何問題。

在任何特定的計時器隊列中可以擁有的計時器數量可能有一些限制。我不知道這個限制是什麼。當我大約一年前調查這些計時器時,看起來 .NET Framework 為每個程序(或者可能是每個應用程序域)創建了一個計時器隊列,並且您創建的所有計時器都放入了該隊列。

通過創建自己的系統來複製計時器隊列功能可能沒有意義,該系統使用單個計時器和某種類型的優先級隊列機制來控制接下來呼叫的內容。這就是計時器隊列已經為您所做的。

看起來您可以輕鬆地建構一個創建 10,000 個計時器的測試程序。將每一個設置為在最後一個後一秒打勾,並將其周期設置為 10,000 秒。然後坐下來看著它滴答作響。或者讓您的程序跟踪誰應該下一個打勾以及誰實際上是下一個打勾。

引用自:https://stackoverflow.com/questions/3103150