代码之家  ›  专栏  ›  技术社区  ›  ollifant

WPF用19螺纹

wpf
  •  12
  • ollifant  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 13 年前
        1
  •  18
  •   Jerry Bullard    15 年前

    首先,现在不是19岁。

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

    现在为了10 .

    根据一篇叫做 "Build More Responsive Apps With The Dispatcher" ,wpf从两个线程开始:

    所有WPF应用程序都以 两个重要的螺纹, 一个用于渲染 一个用于管理用户界面 . 渲染线程 是运行在 背景,所以唯一的线索 你通常处理的是用户界面 线程。

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

    有不同类型的.NET 线程:终结器、GC、调试器, 定时器、线程池、主和 后台线程。但不是全部 管理与.NET相关的线程。

    从开始 从wpf中,添加gc和终结器以 . 要访问的调试器线程(所有托管应用程序在不调试时都有一个托管应用程序)中的外接程序 . 添加计时器 .

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

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

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