c# - Parallel.For 与 Parallel.Invoke

标签 c# multithreading

我有一堆彼此互斥的方法,因此可以并行运行。有没有好的方法可以做到这一点?到目前为止,我有以下两种实现,但我不太确定是否应该选择其中一种。

使用Parallel.For :

Parallel.For(0, 2, i =>
{
    switch (i)
    {
        case 0:
            SomeMethod1();
            break;
        case 1:
            SomeMethod2();
            break;
    }
});

使用Parallel.Invoke :

Parallel.Invoke(
    () => { SomeMethod1(); },
    () => { SomeMethod2(); }
);

其中哪一个性能最佳?或者有其他更好的方法吗?

最佳答案

我认为性能不应该是这里的问题。这都是关于可读/可维护的代码。

  • 第一个;我认为将开关放在 Parallel.For 中是不好的做法。这很令人困惑,而且使用大型开关时,它将无法读取/无法维护
  • 第二个;更好的是,您可以将操作存储到 List<Action> 中首先。

就像 Henrik 已经说过的:Parallel.Invoke(SomeMethod1, SomeMethod2);在这种情况下(对我来说)是最好的可读性。 (在本例中它有效,因为没有参数/返回值)


但作为对你的问题的 react ;每次调用执行 switch/case 都会产生一些额外的开销。

关于c# - Parallel.For 与 Parallel.Invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678065/

相关文章:

c# - 创建新的数据库连接到 SQL 需要多长时间

有界队列的 Java 线程池

Java - 创建一个新线程

java - 当我使用多线程进行更新操作时,数据库端会发生什么?

c# - 按钮内容变化

c# - 用于 PostSharp 2.0 和 .NET Framework 2.0 的 Log4PostSharp

c# - 具有非 ConfigurationElement 属性的自定义配置部分

c# - Catel ViewModelToModel 没有链接

java - Java 中的线程未恢复?

java - JDBC 在 "same"时间打开 2 个连接