6

我一直在使用 Visual Studio 中的并发可视化工具来了解我正在处理的 WPF 项目中的线程。该应用程序不是大量的多线程,所有多线程只是为了避免阻塞 UI 线程。当我运行并发可视化器时,我非常惊讶地看到大约 50 多个线程!为了让事情变得更加混乱,几乎所有这 50 多个线程都将全部时间都花在了“同步”上,据我所知,这是“阻塞”的。

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

Concurrency Visualizer 的屏幕截图,显示了一个简单 WPF 应用程序中的 10 个线程

所以我的问题是:

  1. 为什么在一个非常简单的应用程序中有这么多线程?
  2. 一般来说,这些线程的作用是什么?
  3. 为什么他们几乎把所有的时间都花在“同步”上?
  4. 对涵盖该主题的书籍/网站有什么建议吗?
4

1 回答 1

0

Jerry Bullard 为这个问题提供了一个很好的答案:WPF 应用程序的 19 个线程

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

于 2016-09-18T19:50:57.793 回答