C#/WPF 使用的Task线程程序缺依旧响应缓慢问题
问题:C#/WPF 使用的Task线程程序缺依旧响应缓慢问题
摘要:相信很多做WPF的开发者在请求接口的时候会去采用开一个线程Task去请求接口。避免UI卡主等等。但有一个问题是但开的线程比较多的情况下程序会卡主一段小时间。
环境:WPF、Win7 四核。
了解Task的使用机制
先上一个环境图:
从图片可以看出机子是四核的Cpu。业务逻辑是从登录到主页的数据全部显示。根据产品的需求,业务的完全展示需要请求大概8个接口。一开始我采用的都是接口同步的情况去请求,然后由于同步导致UI卡顿的原因要求我优化程序。因此我就将方法改为异步请求并且在外层包裹一个Task。然后重点就来,这个Task是真的香,用起来还不错。O(∩_∩)O哈哈~ 然后问题就随之而来了。我的电脑由于是八核的,所以请求起来都还算挺流畅。但有一台测试机就是会卡顿,但平时用起来也好好的搞得我是焦头烂额。后来去一步步排查发现但我Task越用越多的时候,程序忽然就变得慢慢的卡起来。这时候才明确的找到问题的所在。就是Task用得太多了。通俗易懂来讲呢,Task并不是万能的,它其实可以说是在透支这电脑或者程序的性能,来提高效率。因此对于Task的运用一定得合理。否则Task这么香为何不多用几个Task。
如何实际去运用它
首先得对业务逻辑进行拆分,分为重要模块和次要模块。对于重要模块优先去进行处理和显示再来对这些次要模块进行处理。比如主页的一些展示用的数据列比较重要可以对他进行优先操作。对于一些头像啊、名称啊、等级啊。等等次要模块可以稍微的给他延后显示,因为用户一进来可能关注的是你首页重要的数据是否展示完整了。因此合理的去运用Task能有效的提高系统的性能。过多的使用可能会导致性能的下降。
最后
希望对大家有所帮助,还有什么问题可以在下方留言。谢谢!