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个线程(就像在你的屏幕上)。