在遞迴時,有用到foreach

之前也習慣使用

結果看了幾篇文

平行運算 (一):Parallel.For、Parallel.Foreach 用法及技巧

平行運算 (二):PLINQ 的應用

用.NET展現多核威力(3) – 佛心TPL之Parallel.For好威

發現原來一直看到的AsParallel是多重執行緒的方式

二話不說

先把最近在玩的小程式套用一下

原本的程式:

      private TreeNode getUp(MaxiEntities db, int p, TreeNode t)
        {
            var innerlist = db.tType.Where(s => s.cUpId == p);
            if (innerlist.Count() > 0)
            {               
                foreach (var i in innerlist)
                {
                    t.Nodes.Add(getUp(db, i.cId, new TreeNode(i.cNameEn + " | " + i.cNameCn + " | " + i.cValue + " | " + i.cSort + " | " + (i.cEnable ? "啟用" : "停用")) { Tag = i.cId }));
                }
            }
            return t;
        }

修改後:

        private TreeNode getUp(MaxiEntities db, int p, TreeNode t)
        {
            db.tType.AsParallel().Where(s=>s.cUpId == p).ForAll(i =>
            {
                t.Nodes.Add(getUp(db, i.cId, new TreeNode(i.cNameEn + " | " + i.cNameCn + " | " + i.cValue + " | " + i.cSort + " | " + (i.cEnable ? "啟用" : "停用")) { Tag = i.cId }));
            });
            return t;
        }
老實說

真的少程式碼又少了一截

開心~~


arrow
arrow

    倧齊 發表在 痞客邦 留言(7) 人氣()