基于处理器类型在 C# 应用程序中运行变量线程

本文关键字:运行 变量 线程 应用程序 处理器 类型 | 更新日期: 2023-09-27 18:36:47

我正在用C#编写一个Windows应用程序,它本质上是一个多线程的应用程序。但是我正在修复中,因为此应用程序可以在赛扬/P-IV系统上运行到Core i7系统。因此,我无法决定如何确定要为此应用程序生成的线程数。

有没有办法根据用于利用 CPU 最大功率并使我的应用程序不会滞后/减慢/冻结的处理器来确定我可以生成多少线程?你使用任何通用公式吗?

谢谢。

基于处理器类型在 C# 应用程序中运行变量线程

我会考虑使用ThreadPool.据我所知,.NET 框架本身管理最佳线程数 (http://msdn.microsoft.com/en-us/library/0ka9477y.aspx)。

Environment.ProcessorCount就是你要找的。

对于问题的第二部分,最好的方法是测试不同数量的线程。 这完全取决于您的线程到底在做什么,它们是否花费了大量时间阻塞,或者它们可能共享公共系统资源,相互点击缓存行,等等,所以你不能真正给出这种事情的一般公式。 这一切都在很大程度上取决于您的特定线程行为。

要获取可以使用的逻辑处理器数量System.Environment.ProcessorCount,但是它将与启用超线程的系统上的实际处理器/内核计数不同。要获得更准确的信息,您需要使用 WMI 元数据Win32_ComputerSystem.NumberOfProcessorsWin32_ComputerSystem.NumberOfLogicalProcessors

但是,我建议让系统负责调度并使用高级多线程子系统之一,如任务或线程池。