问题:C#/WPF 使用的Task线程程序缺依旧响应缓慢问题

摘要:相信很多做WPF的开发者在请求接口的时候会去采用开一个线程Task去请求接口。避免UI卡主等等。但有一个问题是但开的线程比较多的情况下程序会卡主一段小时间。

环境:WPF、Win7 四核。

了解Task的使用机制

先上一个环境图:

从图片可以看出机子是四核的Cpu。业务逻辑是从登录到主页的数据全部显示。根据产品的需求,业务的完全展示需要请求大概8个接口。一开始我采用的都是接口同步的情况去请求,然后由于同步导致UI卡顿的原因要求我优化程序。因此我就将方法改为异步请求并且在外层包裹一个Task。然后重点就来,这个Task是真的香,用起来还不错。O(∩_∩)O哈哈~ 然后问题就随之而来了。我的电脑由于是八核的,所以请求起来都还算挺流畅。但有一台测试机就是会卡顿,但平时用起来也好好的搞得我是焦头烂额。后来去一步步排查发现但我Task越用越多的时候,程序忽然就变得慢慢的卡起来。这时候才明确的找到问题的所在。就是Task用得太多了。通俗易懂来讲呢,Task并不是万能的,它其实可以说是在透支这电脑或者程序的性能,来提高效率。因此对于Task的运用一定得合理。否则Task这么香为何不多用几个Task。

如何实际去运用它

首先得对业务逻辑进行拆分,分为重要模块和次要模块。对于重要模块优先去进行处理和显示再来对这些次要模块进行处理。比如主页的一些展示用的数据列比较重要可以对他进行优先操作。对于一些头像啊、名称啊、等级啊。等等次要模块可以稍微的给他延后显示,因为用户一进来可能关注的是你首页重要的数据是否展示完整了。因此合理的去运用Task能有效的提高系统的性能。过多的使用可能会导致性能的下降。

最后

希望对大家有所帮助,还有什么问题可以在下方留言。谢谢!

C#/WPF 使用的Task线程程序缺依旧响应缓慢问题的更多相关文章

  1. 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型

    今天有时间了,继续<编写高质量代码改善程序的157个建议>的阅读,当我阅读到建议87的时候,里面的一些代码示例和文中所说的不一致了,是不是我现在用的是NetFramework 4.0的缘故 ...

  2. 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型

    建议87:区分WPF和WinForm的线程模型 WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button.TextBox等)必须由创建它的那个线程进行更新.WinForm在这方面 ...

  3. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  4. C# 异步编程3 TPL Task 异步程序开发

    .Net在Framework4.0中增加了任务并行库,对开发人员来说利用多核多线程CPU环境变得更加简单,TPL正符合我们本系列的技术需求.因TPL涉及内容较多,且本系列文章为异步程序开发,所以本文并 ...

  5. WPF性能调试系列 – 应用程序时间线

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...

  6. APUE 线程 - 程序清单

    APUE 线程 - 程序清单 程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; ...

  7. WPF 开发自动开机启动程序

    原文:WPF 开发自动开机启动程序 本文告诉大家如何在 WPF 开发一个可以自动启动的程序 本文使用的自动开机启动方法是通过快捷方式放在启动文件夹的方式. 创建快捷方式 /// <summary ...

  8. Delphi XE6 使用定时器或者线程解决程序界面无响应问题

    ---恢复内容开始--- 介绍 在手机应用上,我们不应该使用速度慢的代码,当然我们在桌面程序上也应该避免这个,当手机应用长时间没有相应的时候,程序会提示“程序没响应,是否关闭”的提示,这个非常不好,所 ...

  9. WPF Dispatcher.BeginInvoke子线程更新UI

    在开发WPF应用时出现:”调用线程无法访问此对象,因为另一个线程拥有该对象.“ 是因为UI线程是WPF应用的主线程,若尝试子线程更新UI线程应使用Dispatcher.BeginInvoke()或者I ...

随机推荐

  1. python爬取链家二手房信息,确认过眼神我是买不起的人

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  2. Group Convolution组卷积

    思路按照常规卷积到组卷积来. 常规卷积: 如果输入feature map尺寸为C∗H∗W C*H*WC∗H∗W,卷积核有N NN个,输出feature map与卷积核的数量相同也是N NN,每个卷积核 ...

  3. 手把手教你springboot中导出数据到excel中

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  4. Centos-shell-特殊字符

    shell 通配符 # 注意完全不同于正则,类似正则 * 任意至少一个字符 ? 任意一个字符 []   []中任意一个字符,相关字符集a-z A-Z 0-9 shell 重定向 # 重新指定系统标准输 ...

  5. selenium学习之基本操作(一)

    通过selenium的使用可以驱动浏览器来模拟加载网页,简单定位元素和获取对应的数据:# find_elements_by_id #(根据id属性值获取元素列表)# find_elements_by_ ...

  6. lens distortion

    来源:http://michel.thoby.free.fr/Fisheye_history_short/International_Standards_about_Distortion.html H ...

  7. 【题解】[USACO07OPEN]Dining G

    \(Link\) \(\text{Solution:}\) 这一题,我们要做到,食物和牛.牛和饮料均为一对一的关系.我们发现这个图不好建立. 经典技巧:将牛拆边,拆成入点和出点,并连容量为\(1\)的 ...

  8. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  9. CentOS7 下 swap 分区的创建、删除及相关配置

    一般我们在购买云服务器(例如:阿里云ECS.腾讯云服务器)的时候,选择 CentOS 7 系统之后,登录系统,发现 swap 大小为 0(即没有分配). 如果我们想在该 服务器上安装 Oracle 数 ...

  10. 感觉学java学到自己的瓶颈期了,各种框架乱七八糟,感觉好乱。该怎么办!?

    通常我们都会有这样的一个疑问! 解决办法 这时候,你需要的是分清条理,重整知识架构 GitHub开源社区有一个这样的项目,我觉得非常好,很适合Java有基础但是想进阶提升的人. 项目简介 本期介绍的开 ...