多线程WPF应用程序是';t支撑2或3个以上的平行螺纹
本文关键字:3个 应用程序 WPF 支撑 多线程 | 更新日期: 2023-09-27 18:21:33
我有一个WPF应用程序,它使用多线程方法下载文件,它消耗了我几乎100%的带宽(这正是我所需要的),但当我将代码从这个WPF应用软件移动到我的主WPF应用程序(其中包含许多其他实用程序)时,我的带宽消耗会减少到近25%或更少。在检查了我的项目后,我意识到应用程序启动了所有线程,然后一些线程进入睡眠或等待状态,只有2、3个线程在下载,然后当他们完成工作时,其他2、3线程醒了。我不明白为什么会发生这种情况,因为它在我的另一个WPF应用程序中运行良好。我使用GalaSoft.MvvvmLight.Messaging.Messenger进行消息传递,这样我就可以调用下载程序或上传程序来开始他们的工作。我尝试过线程池System.Threading.Tasks.Parallel.Invoke,但所有这些都给出了相同的结果——它们在独立的WPF应用程序中运行良好,但在主应用程序中不起作用。
更新:
我知道的是,当我启动我的应用程序并让它运行一段时间时,一两分钟内什么都不做。然后应用程序开始执行得更好,并给出与独立应用程序相同的结果。
并行扩展和任务并行有着悠久的历史,已经足够完善了。我建议研究线程的应用程序负载级别,这听起来已经足够高了。
正如Gusdor所写的那样,您不能将大量线程拉到处理器中数量有限的内核中
每个核心一次只执行一个线程。然后停止线程,将上下文卸载到内存,并加载来自下一个线程的指令。
没有魔术,检查程序和其他进程的重载。