我有一个WPF应用程序,它使用几个后台线程来预编译LINQ查询并预先存储一些值,稍后将需要。 TPL被使用来启动这些任务:沉重的TPL后台线程在WPF的用户界面线程产生滞后
var newTask = new Task(taskAction, myCancelToken, TaskCreationOptions.LongRunning);
newTask.Start();
这工作,任务分布在几个CPU内核等。但是,这些线程会导致高CPU负载,那就是在用户界面,这往往绊倒察觉甚至冻结,只要线程没有完成。
那么,什么可能是一个合理的方式来平滑UI。通过研究发现,那个人不应该给线程特别的优先权。其他人的意思是,经常使用Thread.Sleep()是要走的路,这对我来说似乎有点陈腐和诡诈。
有没有额外的方式我不知道?线程优化是否存在真正的缺点(这不可能通过TPL直接实现,afaik)?
在此先感谢!
`TaskCreationOptions.LongRunning`创建新线程而不是使用线程池。你开始多少个线程,你的目标机器有多少个核心? – 2011-12-16 09:38:21
我开始约十或十二个任务。 LongRunning模式只是一个尝试,我没有开始,并有相同的结果。核心数量可能不同,因为没有特殊的专用目标系统设置。 – 2011-12-16 10:56:35