【问题标题】:Parallel.ForEach Set MaxDegreeOfParallelism globallyParallel.ForEach 全局设置 MaxDegreeOfParallelism
【发布时间】:2016-11-23 03:08:56
【问题描述】:

假设我有一种情况,我真的想使用Parallel.ForEach 而不是常规的foreach 循环,因为它的性能要高得多(而且更酷),但是让.NET 确定我的并行度会导致灾难性的后果。

现在说我发现了我需要放在ParallelOptions.MaxDegreeOfParallelism 参数中的神奇数字,这样我的应用程序就超级美味了,而且不会超级好吃坏了。

每次我调用Parallel.ForEach(或它的任何其他派生词)时,不必记住包含一个带有幻数的ParallelOptions参数,有没有办法在web.config指定并行度等级?或者其他一些可以全局且不可见地设置值的方法,这样我就不必在任何时候都依赖自己和其他开发人员的记忆来获得并行性的好处?

【问题讨论】:

  • +1 我对你问题中的幽默大笑,这是一个非常好的我可以补充的问题。现在,2 年后,你知道如何在递归函数中控制野兽吗? (如果没有一个回答者被命名为“递归”并且给了我这个错误的命中,我就不会找到你的帖子......谈谈你的侥幸:)
  • 我不确定你所说的“控制野兽”是什么意思,但这听起来是一项艰巨的任务。我会说避免这个问题并希望其他人处理它。至于我的问题在这里,经过两年的经验积累,我意识到,如果你试图利用一种需要不同人之间协调的技术,否则会遭受巨大的后果,那绝对不值得这样做。我最终删除了对@的调用987654328@ 应用了这个问题并选择了较低(但仍然可以接受)的性能。
  • 我也意识到,在增加了两年的经验后,我比以前更生气了。我猜编码太多了。
  • 对,我同意。我不会尝试在那里控制并行性(野兽)。我将创建 4 个线程并赋予它们每个逻辑以避免在它们遍历同一棵树时相互踩踏。谢谢,“傻瓜的愤怒管理”对我有用(不是开玩笑)。 :-)

标签: asp.net c#-4.0 task-parallel-library


【解决方案1】:

简短的回答是不,您不能使用配置文件配置此参数,但是您仍然可以拥有一个所有调用都可以引用的 const 变量。

【讨论】:

    【解决方案2】:

    您可以创建自己的包装函数,调用 Parallel.Foreach 从配置文件或常量中读取度数。

    【讨论】:

    • 这是个好主意,如果我无法找到一种方法以某种方式在全球范围内影响它,我可能会采取的路线。它仍然没有解决必须制定每个人都知道并遵守的政策的问题。这就是我要避免的风险。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多