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

时间:2012-06-10 13:01:09

标签: c# windows multithreading processor

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

有没有办法确定我可以产生多少个线程,具体取决于用于利用CPU的最大功率的处理器以及使我的应用程序不滞后/减速/冻结?您使用的是哪种通用配方?

感谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Environment.ProcessorCount正是您要找的。

对于问题的第二部分,最好的方法是测试不同数量的线程。这一切都取决于你的线程究竟在做什么,他们花了大量的时间阻塞,或者他们可能共享共同的系统资源,击中彼此的缓存行,等等,所以你不能真正给出这种类型的通用公式事情。这完全取决于您的特定线程行为。

答案 2 :(得分:1)

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

但是我建议让系统负责调度并使用其中一个高级多线程子系统,如TasksThreadPool