使用PLINQ对线程计数的内存使用限制

时间:2013-04-25 22:14:53

标签: c# .net plinq

我正在使用PLINQ进行数据并行化操作。每个线程消耗大量内存,这些内存根据算法设置而变化,根据算法选项,没有简单的方法来预先计算需要多少内存。当内存要求较低时,最佳线程数为7,系统总数为8;当内存要求很高时,2个线程比1更显着改进,但是一旦使用3个线程,系统就开始点击分页文件,CPU利用率下降到0,性能变差了数百倍。

我希望能够做的是让PLINQ逐步增加线程数,同时监控内存负载,一旦系统耗尽可用的物理内存,在最后一个线程上设置取消令牌,以便它可以回滚它的内存,允许其他线程以最佳方式执行。

关于如何从PLINQ中获取此行为的任何想法,还是我必须完全自己滚动?

1 个答案:

答案 0 :(得分:1)

PLINQ使用TreadPool个线程(默认为TaskSchedulerTaskFactory),因此您可以使用ThreadPool.SetMaxThreads(#N, #Q)根据应用的当前内存消耗来控制线程数。< / p>

但在我看来,这个级别的内存消耗是一个应用程序,可能应该重新设计并推送到另一个模块(如数据库 - 一个简单的RDBMS或NoSQL一个 - 或一个缓存系统) - 只是一个建议。 / p>