微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 重型TPL后台线程在WPF的UI-Thread中产生滞后

我有一个 WPF应用程序,它使用几个后台线程来预编译LINQ查询并预先缓存一些值,这些将在以后需要. TPL用于通过以下方式启动这些任务:

var newTask = new Task(taskAction,myCancelToken,TaskCreationoptions.LongRunning);
newTask.Start();

这样工作,任务分布在几个cpu核心等上.但是,这些线程会导致高cpu负载,这在UI中是可感知的,只要线程没有完成,它就容易绊倒甚至冻结.

那么,什么是平滑UI的合理方法.通过研究我发现,那个人不应该给线程特别优先.其他人的意思是,频繁使用Thread.Sleep()是要走的路,这对我来说似乎有点过时了.

还有其他我不知道的方法吗?是否存在优先级线程的真正缺点(直接通过TPL不能实现,afaik)?

提前致谢!

解决方法

比如说4核机器上有10个线程太多了.如果它们像预编译查询一样受计算限制,那么它们都会争用cpu时间并且会使整个机器无响应.

我建议你使用Environment.ProcessorCount来查找可用的内核数量,并且一次只启动(那个数字 – 1)个线程.您可以优先处理先运行的工作,并将其他工作排入连续.

这将使核心免费为您的UI线程提供服务,并且应该让应用程序再次响应.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐