gpt4 book ai didi

c# - 为什么有时 Task 比 Thread 慢很多?

转载 作者:太空狗 更新时间:2023-10-30 00:08:39 26 4
gpt4 key购买 nike

我正在使用 MVVM 模式制作 WPF 应用程序。我发现有时 Task 比 Thread 慢很多。例如,在测试 ViewModel 中:

public void DoSomething()
{
Stopwatch stopwatch = Stopwatch.StartNew();
new Thread(() =>
{
Debug.Print(string.Format("Elapsed: {0}", stopwatch.ElapsedMilliseconds));
}).Start();
}

输出通常是Elapsed: 0。它花费了 0 毫秒。但是,如果我将 Thread 替换为 Task。它可能花费 5000~15000 毫秒。

我试图在另一个 WPF 项目中重现它,但失败了。

我的系统配置:

  • Visual Studio 2010 SP1
  • .NET Framework 4.0
  • Windows 7 64 位。
  • 4GB 内存
  • AMD Phenom II 635(4 核,2.9 GHz)

有什么想法吗?谢谢。

(抱歉,我不能上传有这个问题的项目)

最佳答案

默认情况下,Task 不会创建新线程,而是在线程池中排队。这意味着当所有线程池线程都忙时,任务可能会等待(在极端情况下无限长),直到它真正开始执行。

线程池尝试确定最佳线程数,并为每个内核创建至少一个线程。您可以使用 ThreadPool.SetMinThreads()提高使用的最小线程数,但要小心,它可能会降低性能。

另一种选择是创建您自己的 TaskScheduler完全按照您想要的方式使用线程。

关于c# - 为什么有时 Task 比 Thread 慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com