我目前正在使用属于Reactive Extensions for .Net(Rx)的并行扩展程序。我相信它们也可以通过.Net 4 beta版本获得。
1)有没有办法确定实际使用了多少线程。我假设这与Environment.ProcessorCount
(逻辑核的数量)有关,但我想检查一下。
2)有没有办法配置你想要使用多少线程?我注意到有一个ParallelOptions.MaxDegreeOfParallelism
属性看起来很有希望,但它似乎默认为-1(线程数没有限制),我也不太确定是否可以为当前应用程序设置一次,而不是传递给Parallel.For()
等的每次调用
答案 0 :(得分:0)
我不知道.Net 4.0,但在PFX 2008年6月的CTP中有System.Threading.Tasks.TaskManagerPolicy
类,我用来限制使用的处理器数量。有很多关于如何使用它的例子,只是google它。 :)
答案 1 :(得分:0)
有Observable.Context对象,它定义了如何在Rx线程内完成并行操作。 默认实现使用global :: System.Threading.ThreadPool.QueueUserWorkItem功能。所以你可以在那里设置MaxWorkerThreads来定义最大值。
在rx团队博客上阅读更多内容。 http://blogs.msdn.com/rxteam/archive/2009/11/21/observable-context-observable-subscribeon-and-observable-observeon.aspx
希望这会有所帮助。
答案 2 :(得分:0)
更新:此选项出现在.Net 4中; ParallelOptions.MaxDegreeOfParallelism
在回答我自己的问题时,答案似乎只是 - 否。使用的线程/核心数似乎不可配置。