c# - 如何在运行时决定使用 PLINQ 还是 LINQ?

标签 c# performance parallel-processing

或者通常在并行操作和顺序操作之间做出决定。 由于开销的原因,如果不进行测试就很难知道是并行实现还是顺序实现是最好的。显然,训练“决策者”使用哪种方法需要一些时间。我会说这种方法不可能是完美的,所以它本质上是概率性的。 x,y,z 确实会影响“决策者”。我认为一个非常幼稚的实现是在开始时给两个 1/2 机会,然后根据过去的表现开始支持它们。这无视 x,y,z,无论如何,请分享您的启发式方法、您的经验(如果有)以及您的提示。

示例代码:

public interface IComputer {
    decimal Compute(decimal x, decimal y, decimal z);
}

public class SequentialComputer : IComputer {
    public decimal Compute( ... // sequential implementation
}

public class ParallelComputer : IComputer {
    public decimal Compute( ... // parallel implementation
}

public class HybridComputer  : IComputer {
    private SequentialComputer sc;
    private ParallelComputer pc;
    private TheDecider td;  // Helps to decide between the two.

    public HybridComputer() {
        sc = new SequentialComputer();
        pc = new ParallelComputer();
        td = TheDecider();
    }

    public decimal Compute(decimal x, decimal y, decimal z) {
        decimal result;
        decimal time;
        if (td.PickOneOfTwo() == 0) {
            // Time this and save result into time.
            result = sc.Compute(...);
        } else {
            // Time this and save result into time.
            result = pc.Compute();
        }
        td.Train(time);
        return result;
    }
}

最佳答案

我会删除计算机特化并在您的 PLINQ 代码上使用 WithDegreeOfParallelism。如果你的决策者知道没有并行是最优的,就让你的决策者返回 1。

关于c# - 如何在运行时决定使用 PLINQ 还是 LINQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3020096/

相关文章:

c# - 未找到以下命令 netsh

c# - 无法访问 MVC 6 API

performance - 在不连接的情况下测试 VPN 服务器速度

python - 使用线程和/或多处理同时移动多个 turtle

java - 在集群环境中生成范围(0-100k)的随机数

C++ 中断 omp 并行

c# - 在 C# 中创建一个文件并将其作为 IntPtr 传递给 COM 对象

c# - Web 内容在 ChromiumFX 中呈现两次

performance - 使用无限列表时执行速度较慢

winforms - 如何加快.NET Winforms渲染