0

次のLINQクエリがあります

  var meshesList= (
            from element in elementCoord.Elements
                let coordinateList = elementCoord.Coordinates
                select new Plane3D
                           {
                               Pt1 = coordinateList[element.NodeList[0]], Pt2 = coordinateList[element.NodeList[1]], Pt3 = coordinateList[element.NodeList[2]]
                           }

                    into meshPlan
                    let algo = new AlgoProvider()
                    where WellBehaveMesh(meshPlan)
                    select algo.ComputeVolume(meshPlan, platformPlan)).ToList();

fromuntilはのinto meshPlanリストを選択しますmeshPlan。これは、並列化が活用できると私が信じている部分です。

上記の操作を並列化するために PLINQ を使用する方法について何か考えはありますか?

次の操作を試しました。

  var meshesList= (
            (from element in elementCoord.Elements
                let coordinateList = elementCoord.Coordinates
                select new Plane3D
                           {
                               Pt1 = coordinateList[element.NodeList[0]], Pt2 = coordinateList[element.NodeList[1]], Pt3 = coordinateList[element.NodeList[2]]
                           }

                    into meshPlan).AsParallel()  //cannot compile
                    let algo = new AlgoProvider()
                    where WellBehaveMesh(meshPlan)
                    select algo.ComputeVolume(meshPlan, platformPlan)).ToList();

しかし、残念ながらコンパイルできません。

4

1 に答える 1

2

これを機能させる最も簡単な方法は、2 つのクエリ式に分割することです。

var meshPlans = from element in elementCoord.Elements
                let coordinateList = elementCoord.Coordinates
                select new Plane3D
                {
                    Pt1 = coordinateList[element.NodeList[0]], 
                    Pt2 = coordinateList[element.NodeList[1]],
                    Pt3 = coordinateList[element.NodeList[2]]
                };

var meshesList = (from meshPlan in meshPlans.AsParallel()
                 let algo = new AlgoProvider()
                 where WellBehaveMesh(meshPlan)
                 select algo.ComputeVolume(meshPlan, platformPlan)).ToList();

クエリ式 (およびlet) が機能する方法を考えると、単一のクエリ式内だけでやりたいことを正確に実行できるかどうかはわかりません。

一方でAsParallel()、最初のelementCoord.Elementsプロパティだけを入れてみましたか?とにかく、効果的に並列化するのと同じループです...少し前です。

于 2010-08-07T09:02:56.440 に答える