我刚创建了一个新的WPF应用程序,该应用程序有大约5个窗口并使用Xceed数据网格。在查看任务管理器后,我看到这个小应用程序运行了19个线程。
这可以是正确的吗?我希望WPF框架使用2-3个线程,但不是19个。 或者我做错了什么?
答案 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,这是你的基线。 只关心您创建的线程超出此最低限度。