19个WPF应用程序的线程

时间:2009-09-27 17:48:07

标签: wpf

我刚创建了一个新的WPF应用程序,该应用程序有大约5个窗口并使用Xceed数据网格。在查看任务管理器后,我看到这个小应用程序运行了19个线程。

这可以是正确的吗?我希望WPF框架使用2-3个线程,但不是19个。 或者我做错了什么?

1 个答案:

答案 0 :(得分:18)

首先,它不是19。

运行“Hello,World!”时WPF应用程序,我在任务管理器中看到10个线程。当使用Visual Studio调试器运行相同的应用程序时,它使用19.因此,首先,将其中的9个添加为调试器的开销。

现在为10

根据一篇名为"Build More Responsive Apps With The Dispatcher"的MSDN杂志文章,WPF以两个主题开始:

  

所有WPF应用程序都以   两个重要主题,一个用于呈现一个用于管理用户界面。渲染线程   是一个隐藏的线程,运行在   背景,所以唯一的线程   你经常处理的是UI   线程。

但根据this article,所有托管应用程序中都有很多基本线程,无论是否为WPF:

  

有不同类型的.NET   线程:终结器,GC,调试器,   计时器,线程池,主要和   背景线程。但不是所有的   管理与.NET相关的线程。

从WPF中的两个开始,添加GC和终结器以达到。添加调试器线程(即使没有调试,所有托管应用程序都有一个)来到。添加计时器以进入

并且,在VS外部启动后,将调试器附加到我的WPF应用程序,我可以看到线程池中有两个工作线程。这可能是最低限度。这使我的应用程序达到

有两个我无法完全解释,但它们很可能是互操作的COM线程(它们绝对不是托管线程)。我引用的second article讨论了更多这些内容。

但这里故事的真正道德是,不要担心它们。如果是香草“Hello,World!” app使用10,这是你的基线。 只关心您创建的线程超出此最低限度。