2013-10-25 76 views
1

我在想,如果有一個合理的方法來確定Timers.Timer對象的負載能力?或者說,線程能力。是否有人知道使用Timer類在高數量(數百個)線程中出現任何問題?紡紗大量Timers.Timer線程

編輯:對於工作,我們將紡紗了線程數,會做一個閾值檢查,並給出了基於誰達到閾值點。它會爲每個客戶啓動一個線程,並且每隔5分鐘左右檢查一次。這是一個服務,它將被安裝在服務器上,因此我使用Timers.Timer而不是Threading.Timer(因爲我也聽說Timers.Timer比Threading.Timers更線程安全)。目前,我只有10個計時器,因爲這是我需要處理的。我要求可能的未來負載。還使用了這個帖子作爲參考,使用哪個定時器:System.Timers.Timer vs System.Threading.Timer

+3

不管你如何操作,你都不應該啓動數百個線程。期。當你這樣做時,你會爲每個額外的線程添加關於上下文切換和內存壓力的開銷。 –

+0

有Windows.Forms.Timer和System.Threading.Timer,選擇一個:)另外,這些線程將做什麼?紡織了數百個線程只是在某些情況下的邏輯... – Stormenet

+0

@Stormenet無,OP在標題Timers.Timer中聲明:) – terrybozzio

回答

3

有誰知道是否有與旋轉起來使用Timer類的線程大量(數以百計)的任何問題?

你似乎假設每個定時器將創建一個私有的線程。但是,情況並非如此。定時器回調在.NET線程池上執行。因此,創建許多定時器本身並不是問題,但線程池可以處理多少併發工作顯然是有限制的。如果所有計時器同時觸發,這會影響到你。

微軟提供了有關文章The Managed Thread Pool線程池中的一般信息。

+0

你是對的,但運算都在談論使用Timers.Timer不threading.timer :) – terrybozzio

+0

@terrybozzio:'System.Timers.Timer'使用實現的類'System.Threading.Timer'所以無論什麼定時器你使用獲得相同的底層實現。 –

+0

不一樣的底層實現請看看http://msdn.microsoft.com/en-us/magazine/cc164015.aspx – terrybozzio