我正在使用MVVM模式制作WPF应用程序.我发现有时候Task比Thread明显慢.例如,在测试ViewModel中:
public void DoSomething()
{
Stopwatch stopwatch = Stopwatch.StartNew();
new Thread(() =>
{
Debug.Print(string.Format("Elapsed: {0}", stopwatch.ElapsedMilliseconds));
}).Start();
}
Run Code Online (Sandbox Code Playgroud)
输出通常是Elapsed: 0.它的成本为0毫秒.但是,如果我取代Thread用Task.它可能花费5000~15000毫秒.
我试图在另一个WPF项目中重现这个,但失败了.
我的系统配置:
有任何想法吗?谢谢.
(抱歉,我无法上传有此问题的项目)
svi*_*ick 13
默认情况下,Task不会创建新线程,而是在线程池上排队.这意味着当所有线程池线程都忙时,任务可能会等待(在极端情况下无限长),直到它实际开始执行.
线程池尝试确定最佳线程数,并且每个核心至少创建一个线程.您可以使用它ThreadPool.SetMinThreads()来提高使用的最小线程数,但要小心这一点,它可能会降低性能.
另一个选择是创建自己的TaskScheduler线程,完全按照你想要的方式使用线程.
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |