并发可视化器 - 了解WPF / CLR线程

时间:2013-02-22 15:03:25

标签: .net wpf multithreading clr

我一直在使用Visual Studio中的Concurrency Visualizer工具来了解我正在研究的WPF项目中的线程。应用程序不是多线程的,所有多线程都只是为了避免阻塞UI线程。当我运行Concurrency Visualizer时,我非常惊讶地看到大约50多个线程!为了让事情变得更加混乱,几乎所有这些50多个线程都花了他们的全部时间在“同步”中,据我所知,“同步”被“阻止”。

作为一个实验,我创建了一个新的空白WPF应用程序项目,并使用Concurrency Visualizer运行它,令我惊讶的是,我希望有一个主要线程的应用程序,可能还有一两个用于垃圾收集或其他CLR的东西,原来有10个线程!

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

所以我的问题是:

  1. 为什么在一个非常简单的应用程序中有这么多线程?
  2. 一般来说这些线程的功能是什么?
  3. 为什么他们几乎把所有时间花在“同步”上?
  4. 有关此主题的图书/网站的任何建议吗?

1 个答案:

答案 0 :(得分:0)

Jerry Bullard在这里提出了一个很好的答案:19 Threads for WPF Application

因此,除了WPF UI和渲染线程之外,还有不同类型的.NET线程:终结器,GC,调试器,计时器,线程池,主线程和后台线程。 Threadpool至少有两个线程。这一切都给了我们至少10个线程(就像在你的屏幕截图中一样)。