2011-10-03 31 views
1

在網絡上,如何實現一個消防和遺忘模式有非常不同的意見。C#ThreadPool或BeginInvoke無EndInvoke

有人說,如果必須實現一個即燃即用模式,調用BeginInvoke而不調用EndInvoke是沒有問題的。

其他人說最好創建一個單獨的ThreadPool對象。我關心的是ThreadPool初始化成本。具體而言,要調用的方法只會將一個對象添加到隊列中,然後返回。

爲此,在池上創建一個線程還是簡單地同步調用該方法是「更快」?我想知道一個粗略的工作門檻,比在池中創建線程更昂貴。

是否有什麼異常捕獲的游泳池和其他restcritions與它有這方面的文獻和?

+1

如果你「簡單地同時調用方法」,你將不會做「即忘即忘」。所以我相信你的選擇是ThreadPool,自己創建Thread(var t = new Thread())或者TPL。 – rtalbot

+0

是的,但主要問題是哪種方法更快。我想我可以簡單地寫一個測量結果並平均比較結果。可能會發現synchron調用速度更快,因爲調用靜態threadpool方法時返回速度會更快。 – Juergen

回答

2

使用ThreadPool時,您不會「在池上創建線程」,您可以使用預先存在的線程或等待一個線程可用。

只有當許多工作正在等待時,池纔會添加另一個線程,但那麼這個線程將被很好地利用。

更好使用任務(Fx4和更高版本)。

+0

因此,與BeginInvoke選擇相比,對池的調用非常便宜? – Juergen

+1

@Juergen:BeginInvoke使用線程池 – BrokenGlass

+0

@BrokenGlass謝謝,這對我來說是新的。主要問題仍然存在:這次電話會議的費用是多少? – Juergen