代码之家  ›  专栏  ›  技术社区  ›  Tony_Henrich

在所有Linq查询中尝试使用Plinq可以吗?

  •  16
  • Tony_Henrich  · 技术社区  · 14 年前

    我读到,如果发现PLinq更贵,PLinq将自动使用非并行Linq。所以我想为什么不把PLinq用于所有事情(如果可能的话),让运行时决定使用哪一个。

    这些应用程序将被部署到多核服务器上,我可以开发更多的代码来处理并行性。

    使用plinq作为默认值有哪些陷阱?

    1 回复  |  直到 11 年前
        1
  •  9
  •   Nix    14 年前

    其中一个陷阱是你失去了利用成套订货的能力。

    获取以下代码:

    var results = new int { 0 ,1 ,2 ,3 };
    var doSomethingSpecial = (from r in results.AsParallel() select r / 2).ToArray();
    

    你不能指望结果是有序的,所以结果 能够 是集合的任意排列。这是最大的陷阱之一,从某种意义上说,如果您处理的是有序数据,那么您可能会因为排序的成本而失去性能优势。

    另一个问题是你失去了捕捉已知异常的能力。因此,我无法捕获空指针异常(不是说您应该这样做),甚至无法捕获FormatException。

    在所有情况下,您不应该总是使用Plinq有很多理由,我将只强调一个。不要读太多的uch到“自动使用非并行Linq”,它只能处理查询简单的障碍情况,或者会太复杂而无法并行运行。

    请始终记住,使用PLINQ的次数越多,您在服务器上消耗的资源就越多,这会占用其他正在运行的线程。

    资源:

    MSDN PLNQ white paper

    Paul Kimmel on PLINQ