【问题标题】:19 Threads for WPF ApplicationWPF 应用程序的 19 个线程
【发布时间】:2010-12-01 19:51:54
【问题描述】:

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

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

【问题讨论】:

  • 这几乎就是任何 Windows 应用程序的方式。如果您要展示表格,10 几乎是最低限度。
  • 10 个线程的表单需要什么?它需要一个用于消息泵。其他 9 个是干什么用的?
  • 这听起来很奇怪。我希望普通应用程序有两个线程,后台工作人员等有额外的线程,但不是 19 个。

标签: wpf


【解决方案1】:

首先,不是 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 中的 two 开始,添加 GC 和 finalizer 以达到 四个。添加调试器线程(所有托管应用程序都有一个,即使没有调试)以达到五个。添加计时器以达到

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多