我有一個抓取另一個桌面快照的應用程序。這個過程被放置並在一個單獨的後臺工作線程中異步運行。在DoWork的事件的微小的樣機是:C#多線程:微線程睡眠開銷
private void GrabImage_DoWork(object sender, DoWorkEventArgs e)
{
/*Grab the image..*/
System.Threading.Thread.Sleep(10)
}
目前,被放置在了Thread.Sleep(10),我只是想知道這麼小的睡眠是否會真正渲染表現不佳,由於恆額外不必要的上下文切換。
讓我知道這個問題是否需要進一步解釋。 乾杯,
編輯: 決定拋出一堆更多的上下文,以幫助專注於特定的答案。
問題帶來了 問:這是當前正在運行的唯一後臺線程嗎? 答:沒有。實際上有一些backgroundworker線程以及一個使用.NET Threadpool類排隊多個線程的線程。因此,睡眠最初被放入代碼中,以考慮允許這些其他線程發生上下文切換。 但是我相信無論如何操作系統是時間片的,所以我確定沒有睡眠時其他線程將有機會執行?
問:這個後臺工作人員是否在不停地運行? 答:應用程序提供了一個界面,通過切換按鈕與桌面進行交互以顯示背景圖像。 因此,如果按鈕被切換,背景工作者基本上可以關閉或不斷攪動。
我希望整體的問題對性能看起來並不重要。我試圖在性能和可用性之間找到一個很好的平衡點。
Windows對各種調度程序具有默認量程,最小值爲〜10-40ms,具體取決於哪一個正在運行。 – user7116 2009-08-31 17:29:41
我想另外一個想法是: 因爲我已經使用了Threadpool類,所以也要將這個工作負載排隊到線程池類而不是sepearte backgroundworker。 – Setheron 2009-08-31 17:51:59