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能有效的提高系统的性能。过多的使用可能会导致性能的下降。
最后
希望对大家有所帮助,还有什么问题可以在下方留言。谢谢!
C#/WPF 使用的Task线程程序缺依旧响应缓慢问题的更多相关文章
- 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型
今天有时间了,继续<编写高质量代码改善程序的157个建议>的阅读,当我阅读到建议87的时候,里面的一些代码示例和文中所说的不一致了,是不是我现在用的是NetFramework 4.0的缘故 ...
- 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型
建议87:区分WPF和WinForm的线程模型 WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button.TextBox等)必须由创建它的那个线程进行更新.WinForm在这方面 ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- C# 异步编程3 TPL Task 异步程序开发
.Net在Framework4.0中增加了任务并行库,对开发人员来说利用多核多线程CPU环境变得更加简单,TPL正符合我们本系列的技术需求.因TPL涉及内容较多,且本系列文章为异步程序开发,所以本文并 ...
- WPF性能调试系列 – 应用程序时间线
WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...
- APUE 线程 - 程序清单
APUE 线程 - 程序清单 程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; ...
- WPF 开发自动开机启动程序
原文:WPF 开发自动开机启动程序 本文告诉大家如何在 WPF 开发一个可以自动启动的程序 本文使用的自动开机启动方法是通过快捷方式放在启动文件夹的方式. 创建快捷方式 /// <summary ...
- Delphi XE6 使用定时器或者线程解决程序界面无响应问题
---恢复内容开始--- 介绍 在手机应用上,我们不应该使用速度慢的代码,当然我们在桌面程序上也应该避免这个,当手机应用长时间没有相应的时候,程序会提示“程序没响应,是否关闭”的提示,这个非常不好,所 ...
- WPF Dispatcher.BeginInvoke子线程更新UI
在开发WPF应用时出现:”调用线程无法访问此对象,因为另一个线程拥有该对象.“ 是因为UI线程是WPF应用的主线程,若尝试子线程更新UI线程应使用Dispatcher.BeginInvoke()或者I ...
随机推荐
- 源码上看 .NET 中 StringBuilder 拼接字符串的实现
前几天写了一篇StringBuilder与TextWriter二者之间区别的文章(链接).当时提了一句没有找到相关源码,于是随后有很多热心人士给出了相关的源码链接(链接),感谢大家.这几天抽了点时间查 ...
- Jakartase_IO流_ — Commons IO_(IO流终极篇)
一.前言 Apache Commons IO是Apache基金会创建并维护的Java函数库. 它提供了许多类使得开发者的常见任务变得简单,同时减少重复代码 二.Commons IO 类库 2.1 Fi ...
- zabbix安装要求
zabbix server 和 zabbix Agent都在一个压缩包中,可以从官网上下载源码包,www.zabbix.com/download.php zabbix是C语言编写,压缩包的文件夹介绍: ...
- Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- JD-GUI反编译jar包为Java源代码
程序员难免要借鉴其他java工程的代码.可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目.本文介绍的反编译工具是 ...
- CUMTCTF'2020 未完成 wp
Web babysqli burp抓包,发现有 的过滤,用/**/过滤空格. 报错注入 payload username=admin&password='/**/or/**/extractva ...
- Code Test(1)
0922test 最小数Time Limit: 1 Sec Memory Limit: 128 MB文件名:a.cppDescription给定一个正整数n,请去掉其中的m个数字,使其剩下的数字按原先 ...
- notepad快捷使用
1.快捷键 参考:https://www.php.cn/tool/notepad/428638.html notepad++是经常使用的一款编辑器软件,在编辑特殊文本的时候(html,java...) ...
- ISP-OB, pedestal 以及ISP概述
网上的直接参考资料 1. https://zhuanlan.zhihu.com/p/36896537 2. https://blog.csdn.net/m0_38049850/article/deta ...
- laravel 500错误的一种可能
报这个错误,我一度认为,再加上,百度,大家都说是配置有问题,经过我不断地问我学长,结果就是一个小错误,简直太丢人了. 居然是少了一个括号的问题,自闭了