c# - 使用 PLINQ 对线程数的内存使用限制

标签 c# .net plinq

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

我想做的是让 PLINQ 逐渐增加线程数,同时监视内存负载,一旦系统耗尽可用物理内存,就在最后一个线程上设置取消标记,以便它可以回滚它的内存,允许其他线程以最佳方式执行。

关于如何从 PLINQ 中消除这种行为的任何想法,或者我是否必须完全自己动手?

最佳答案

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

但在我看来,如此巨大的内存消耗是一个应用程序,也许应该重新设计并推送到另一个模块(如数据库 - 精简 RDBMS 或 NoSQL 数据库 - 或缓存系统) - 只是一个建议。

关于c# - 使用 PLINQ 对线程数的内存使用限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225656/

相关文章:

c# - C# 中的任务并行库和 PLINQ 替代方案

javascript - Promise.defer 的正确模式是什么?

c# - 输入命令 `dotnet run` 时浏览器返回错误 404

c# - 在 linqtoSQL 中使用主键

c# - Linq 快速相交查询 - 增强?

c# - 为什么我的 AsOrdered PLINQ 查询比我的无序查询更快

c# - EF 实体结果为数据库中不为空的列返回空值

c# - 如何为多个动态文本框启用 Google 音译 (ASP.Net)

c# - Xamarin Forms Picker ItemSource 值从 XAML 本地化

.net - PowerShell等效于curl HTTP POST的文件传输