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