2013-02-22 42 views
6

我一直在Visual Studio中使用併發可視化工具來了解我正在處理的WPF項目中的線程。應用程序不是多線程的,所有的多線程只是爲了避免阻塞UI線程。當我運行併發可視化工具時,我非常驚訝地看到大約50多個線程!爲了讓事情變得更加混亂,幾乎所有這些50多個線程都花費了他們整個時間的「同步」,據我瞭解,這個「同步」被「阻止」。併發可視化器 - 瞭解WPF/CLR線程

作爲一個實驗,我創建了一個新的空白WPF應用程序項目,並使用併發可視化工具運行它,再次令我驚訝的是,我期望擁有一個主線程的應用程序,可能還有一兩個垃圾收集或其他CLR的東西,原來有10個線程!

Screenshot of Concurrency Visualizer showing 10 threads in a simple WPF Application

所以我的問題是:

  1. 爲什麼有一個非常簡單的應用如此多線程?
  2. 一般來說這些線程的功能是什麼?
  3. 他們爲什麼花費幾乎所有的時間「同步」?
  4. 涵蓋此主題的任何書籍/網站建議?

回答

0

這是一個很好的答案這個問題在這裏,傑裏·布拉德:19 Threads for WPF Application

所以,除了WPF UI和渲染線程,有不同類型的.NET線程:終結,GC,調試器,定時器,線程池,主線程和後臺線程。線程池至少有兩個線程。這一切給我們至少10個線程(就像在你的屏幕上)。