1.实现多个计划定时任务。任务个数上限为10个,可随时手动停止。
如任务A执行写入后,延时3秒,再刷新; 新任务可能在A任务执行过程中创建并开启。执行工作没有复杂耗时操作。
2.此类需求用一个task或valueTask实现好呢?是多个计划任务放到一个task运行?还是分多个task运行呢?不知多个内存占用如何,工控板内存有限。
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

已结题
c#多任务执行优化方案
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除
- 收藏 举报
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
恐怖如斯恐怖如斯啊 2024-12-06 11:50关注以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
针对你的需求,以下是关于C#多任务执行优化的建议方案:
- 实现多个计划定时任务:
- 可以使用
System.Timers.Timer
或System.Threading.Timer
来实现定时任务。使用System.Timers.Timer
时,可以在 Elapsed 事件处理程序中定义任务逻辑。这些定时器创建简单,可以很好地管理多个定时任务。由于它们使用的是回调机制,所以不会阻塞主线程。 - 对于任务个数上限为10个的要求,可以维护一个包含所有定时任务的列表,并允许手动停止特定的任务。定时任务启动和停止的操作需要特别注意线程同步问题,确保并发环境下的安全性。可以使用锁(lock)或信号量(Semaphore)来同步线程访问共享资源。
- 由于工控板内存有限,你可以将任务的实现尽可能简洁并优化代码以最小化内存占用。如果不涉及到长时间或资源密集型操作,可以将多个计划任务放在一个进程或应用程序中运行。然而,如果你的任务是IO密集型或者并发量大到需要对任务进行分离的话,考虑将每个任务放入不同的进程中执行或使用异步编程模式来优化资源分配。
- 可以使用
关于使用
Task
或ValueTask
的选择:- 如果你希望代码具有异步特性并且不阻塞主线程,可以使用
Task
或ValueTask
来封装异步操作。这两者主要区别在于值类型与引用类型的差异和完成任务的等待机制(例如:非同步上下文的场景中使用 ValueTask 有一定的优势)。但如果任务是IO密集型且你关注的是避免任务本身的创建开销以及实现性能优化的任务分发,推荐使用async/await
和原生的线程池支持而非自定义的 Task。在这种情况下,你的代码逻辑将更简单且更容易维护。此外,由于异步操作可以复用线程池中的线程,所以它在内存占用方面相对更有效率。但对于内存资源有限的场景来说,单个线程内的任务过多仍然有可能带来资源消耗的问题。所以在实现过程中还需特别注意对任务的数量进行管理,避免因内存溢出而导致的问题。在任务过多时可以考虑使用任务调度器(如 TaskScheduler)来管理任务的执行和调度策略。如果考虑到简化内存管理和任务调度的复杂性,可以采用分多个应用程序或进程的方式来执行这些任务,以减小单个进程的内存负担和复杂度。综上所述,使用单一任务或者多任务架构的选择需要根据具体的应用场景和性能要求来综合考虑和评估。总之设计时应综合考虑任务数量、资源占用、执行时间等因素进行决策和优化。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2017-08-15 23:58回答 2 已采纳 在搜索输入的事件中加入延迟2秒数据库SQL查找计划,只要用户还在输入中,则事件仍是新的2秒之后触发。直到用户停止输入后2S才会真正启动搜索最后的输入查询
- 2021-08-17 07:47回答 2 已采纳 代码如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~ using System; using System.Threading; namespace ConsoleAppl
- 2022-04-26 06:46回答 2 已采纳 SQL 语句根据重复条件内联查询 就可以查到重复的了
- 2013-06-20 09:50尤其是在C#这样的高级语言中,这两个特性被广泛应用于处理耗时任务,如网络I/O操作,如下载图片。本文将深入探讨如何使用C#的多线程和异步执行,以及如何结合委托事件来实现这一目标。 首先,让我们理解“多线程”...
- 2021-07-23 13:54回答 3 已采纳 第一要java.exe的完整路径,第二要用StandardError来获取输出
- 2017-03-12 01:46回答 1 已采纳 http://www.manew.com/thread-20882-1-1.html
- 2017-09-04 09:27回答 1 已采纳 你说的对,你可以用带参数的线程的构造函数版本传给线程初始值。 或者用ThreadStart让它立刻执行
- 2021-08-11 09:52C#是一种广泛使用的面向对象的编程语言,尤其适合开发Windows桌面应用程序,包括那些涉及打印功能的应用。 标题中的"ForAllPrinter.zip"可能是一个包含C#源代码、编译后的可执行文件或其他资源的压缩包,用于创建一...
- 2017-12-25 20:16回答 6 已采纳 两个可能性,一个是你的点太多,或者持续增多,导致内存溢出。 一个是你没有正确同步或者滥用同步,造成不必要的上锁。 不知道你是怎么绘制的坐标点,是否启用了双缓冲,启用双缓冲可以提高性能。 用vs带
- 2016-06-06 07:17回答 2 已采纳 模型选择: 网络模型的选择需要衡量开发成本、项目的压力、业务需求等,按照你说的只有5个客户端,那么即使跑视频压力也不大,所以更多要考虑的是业务需求和开发成本。 看你的业务需求,5
- 2015-12-28 03:54回答 1 已采纳 不同的人情况不同。既然你看到它基本用不上,说明你去工作的公司里的确是不用的。用的上的公司也不要你,你也不用操心。
- 2023-07-19 11:06标题中的"C#语言自动化程序框架"指的是使用C#编程语言构建的一种系统,它允许开发者创建自动化解决方案,以高效地执行一系列任务。这种框架通常包含了预定义的类库、方法和工具,使得程序员能够更容易地实现自动化...
- 2019-10-29 07:49回答 2 已采纳 试试看给sql server配置成混合验证,启用sa用户,连接字符串里面写sa用户名密码的方式连,看看 还有,看看查询sysobjects syscolumns等表看看能不能查询到。
- 2021-08-11 13:46《GIS编程:C#实现ArcGIS Server中最短路径开发详解》 在GIS(地理信息系统)领域,开发最短路径算法是常见的任务,特别是在城市规划、交通管理、物流配送等领域有广泛应用。本篇将深入探讨如何利用C#语言,结合...
- 2021-08-11 09:58【标题】"HHSWJQR.rar_C#编程_Visual_C++_" 涉及的是C#编程语言与Visual C++的结合应用,可能是为了实现一个特定的项目或者示例,具体是“6878虎虎生威+机器人+控制+库存”系统。这个系统可能是一个集成自动化解决...
- 没有解决我的问题, 去提问
问题事件
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司