在TPL上执行长任务时的慢图像渲染

时间:2013-11-26 10:35:54

标签: c# wpf multithreading image task-parallel-library

我正在开发一个WPF程序,它使用TPL Parallel.ForEach在后​​台执行长时间运行的任务。 我有一个图像控件,当我试图显示图像时,似乎图像渲染发生在线程池中,并且由于我密集使用它(通过TPL Forech)渲染非常慢。 有没有办法在线程池中以更高优先级执行图像渲染?

1 个答案:

答案 0 :(得分:2)

Parallel.ForEach旨在尽可能多地使用您的CPU。如果您不希望它这样做,那么要么不使用它(只需在单个轮询线程中运行长时间运行的任务),要么控制CPU的并行数量。 .ForEach'使用,passing in a 'ParallelOptions' object to limit its appetite for CPU

你还说你正在跑步'长跑'使用Parallel.ForEach的任务 - 请记住,它是为快速完成cpu绑定任务而设计的,而不是为了长时间运行因为它们等待I / O(例如)的事情。从症状来看,它确实听起来像你正确使用它,只是因为它使用了比你想要的更多的CPU。

至于试图避免线程池,我认为你正在咆哮错误的树 - 它只是已经存在的一组线程,旨在避免创建和销毁线程的开销所有的时间 - 它不是优先机制 - 你的两个活动正在争夺的是访问CPU,而不是访问线程池。