19个WPF应用程序的线程

oll*_*ant 12 wpf

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

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

Jer*_*ard 18

首先,它不是19.

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

现在为10.

根据MSDN杂志的一篇名为"使用Dispatcher构建更多响应式应用程序"的文章,WPF从两个主题开始:

所有WPF应用程序都以两个重要的线程开始,一个用于渲染,另一个用于管理用户界面.渲染线程是一个在后台运行的隐藏线程,因此您通常处理的唯一线程是UI线程.

但根据这篇文章,所有托管应用程序中都有许多基本线程,无论是否为WPF:

有不同类型的.NET线程:终结器,GC,调试器,计时器,线程池,主线程和后台线程.但并非所有与.NET相关的线程都受到管理.

从WPF中的两个开始,添加GC和终结器以获得最多四个.添加调试器线程(即使没有调试,所有托管应用程序都有一个)到达.添加计时器以获得六个.

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

有两个我不能完全解释,但它们很可能是互操作的COM线程(它们绝对不是托管线程).我引用的第二篇文章讨论了更多这些.

但这里故事的真正道德是,不要担心它们.如果是香草"Hello,World!" app使用10,这是你的基线. 只关心你创建的线程超出这个最小值.