我在C#中编写一个基本上是多线程的Windows应用程序。但我正在修复,因为这个应用程序可以在Celeron / P-IV系统上运行到Core i7系统。因此,我无法决定如何确定为此应用程序生成的线程数。
有没有办法确定我可以产生多少个线程,具体取决于用于利用CPU的最大功率的处理器以及使我的应用程序不滞后/减速/冻结?您使用的是哪种通用配方?
感谢。
答案 0 :(得分:2)
我考虑使用ThreadPool
。据我所知,.NET框架自己管理最佳线程数(http://msdn.microsoft.com/en-us/library/0ka9477y.aspx)。
答案 1 :(得分:1)
Environment.ProcessorCount
正是您要找的。 p>
对于问题的第二部分,最好的方法是测试不同数量的线程。这一切都取决于你的线程究竟在做什么,他们花了大量的时间阻塞,或者他们可能共享共同的系统资源,击中彼此的缓存行,等等,所以你不能真正给出这种类型的通用公式事情。这完全取决于您的特定线程行为。
答案 2 :(得分:1)
要获取可以使用System.Environment.ProcessorCount
的逻辑处理器的数量,但是它将与启用超线程的系统上的实际处理器/核心数不同。要获得更准确的信息,您需要使用WMI元数据Win32_ComputerSystem.NumberOfProcessors
和Win32_ComputerSystem.NumberOfLogicalProcessors
。
但是我建议让系统负责调度并使用其中一个高级多线程子系统,如Tasks或ThreadPool