C# Tasks与Threads使用疑问:多设备测试程序卡顿崩溃问题
多USB设备HIDSharp采集程序的性能崩溃问题
问题场景
- 基于HIDSharp开发多USB设备连接程序,通过创建多个APData实例并加入列表统一管理
- GUI点击开始按钮后,选中设备移入GridView,每个APData实例通过Task每隔约40ms测试设备参数
- 仅连接2台设备时运行正常;连接8台设备时,部分设备数据采集变慢,随后程序及电脑逐渐卡顿直至冻结,甚至出现蓝屏
- 已排查排除GUI影响,确认任务调用的类为静态类,仅共享设备跟踪列表及关联采集数据,目前不确定排查方向,猜测需拆分测试任务但无明确依据
任务执行核心代码
foreach (APData ap in lst) { bool inputmode = ConnectionManager.StartAutomaticSampling(ap); var t1 = new Task(() => { while (ConnectionManager.ComparedTime < 1) { ConnectionManager.BeginNoiseTest(ap, APNG_Application.Program.unit, inputmode); date = DateTime.Now; // Update time. ConnectionManager.ComparedTime = DateTime.Compare(date, endTime); } ap.DoneBeingTested = true; ConnectionManager.NoiseTestEnded(ap, APNG_Application.Program.unit); CalculateSNR(APNG_Application.Program.unit, ap); saveFile(APNG_Application.Program.unit, ap); }); t1.Start(); } Task.WaitAll(Task.Delay(timeLimit));
其中ConnectionManager.BeginNoiseTest(ap, APNG_Application.Program.unit, inputmode);是导致程序卡顿崩溃的核心代码。
疑问
- 是否误解了Task的用法?原本以为多Task可实现异步提速,是否应改用Threads?
- 8个Task会耗尽CPU资源吗?
- 如需其他代码片段可提供。
内容的提问来源于stack exchange,提问作者Steven Villarreal
相关产品推荐
相关产品推荐

