2009-09-27 35 views
11

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

这是正确的吗?我预计WPF框架使用2-3线程,但不是19. 或者我做错了什么?

+0

这几乎就是它如何与任何Windows应用程序。如果你正在展示一个表格,10几乎是最低的。 –

+0

10个线程需要什么?它需要一个消息泵。另外9个是什么? –

+0

这听起来很奇怪。我希望有两个线程为普通应用程序提供额外的线程,供后台工作人员等使用,但不是19。 –

回答

17

首先,它不是19

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

现在为10

根据一个名为"Build More Responsive Apps With The Dispatcher" MSDN杂志文章,WPF开始时有两个线程:

所有WPF应用程序在开始时 两个重要的主题,一个渲染一个用于管理用户界面。渲染线程 是一个在 后台运行的隐藏线程,所以 您通常处理的唯一线程是线程。

但根据this article,有很多基本的线程中的所有管理应用程序,WPF与否:

有不同类型的.NET 线程:终结,GC,调试器, 计时器,threadpool,primary和 后台线程。但并不是所有与.NET相关的线程都被管理。

与从WPF开始,添加在GC和终结起床。在调试器线程中添加(即使未调试,所有托管应用程序都有一个)以获得五个。添加计时器以获得六个

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

有两个我不能说明确切,但它们可能是互操作的COM线程(它们绝对不是管理线程)。我引用的second article讨论了更多这些。

但这里故事的真正寓意是,不要担心它们。如果一个香草“你好,世界!”应用程序使用10,这是您的基准。 只关心你创建超出这个最小值的线程。