我刚刚创建了一个新的WPF应用程序,它有大约5个窗口,并利用了Xceed数据网格。在查看任务管理器后,我发现这个小应用程序有19个线程在运行。
这可能是正确的吗?我期望WPF框架使用2-3个线程,但不是19个。或者我做错了什么?
发布于 2009-09-27 20:14:44
首先,它不是19。
在运行"Hello,World!“时WPF应用程序,我在任务管理器中看到10个线程。当使用Visual Studio调试器运行相同的应用程序时,它使用19。因此,首先,从调试器中提取作为开销添加的9。
10的Now。
根据MSDN Magazine的一篇名为"Build More Responsive Apps With The Dispatcher"的文章,WPF从两个线程开始:
所有的WPF应用程序都从两个重要的线程开始,一个用于呈现,另一个用于管理用户界面。渲染线程是在后台运行的隐藏线程,因此您通常处理的唯一线程是UI线程。
但根据this article的说法,所有托管应用程序中都有很多基本线程,不管是不是WPF:
有不同类型的.NET线程:终结器、GC、调试器、计时器、线程池、主线程和后台线程。但并不是所有与.NET相关的线程都是托管的。
从WPF的two开始,添加GC和终结器以获得four。添加调试器线程(所有托管应用程序都有一个线程,即使在不调试时也有一个线程),以获得five。添加计时器以到达six。
而且,在VS外部启动之后,将调试器附加到我的WPF应用程序,我可以看到线程池中有两个工作线程。这可能是最低要求。这将使我的应用程序达到8。
有两个我无法确切说明,但它们很可能是用于互操作的COM线程(它们肯定不是托管线程)。我引用的second article讨论了更多这方面的内容。
但这个故事的真正寓意是,不要担心它们。如果是香草味的"Hello,World!“应用程序使用10,这是您的基准。只关心您创建的线程数超过这个最小值。
https://stackoverflow.com/questions/1484060
复制相似问题