相关疑难解决方法(0)

如何通过LINQ压扁树?

所以我有简单的树:

class MyNode
{
 public MyNode Parent;
 public IEnumerable<MyNode> Elements;
 int group = 1;
}
Run Code Online (Sandbox Code Playgroud)

我有一个IEnumerable<MyNode>.我想得到一个列表MyNode(包括内部节点对象(Elements))作为一个平面列表Where group == 1.如何通过LINQ做这样的事情?

.net c# linq tree .net-4.0

86
推荐指数
6
解决办法
4万
查看次数

嵌套的Parallel.ForEach循环

我有一些代码,我目前正在优化多核架构中的并发性.在我的一个类中,我发现了一个嵌套foreach循环.基本上,外部循环遍历一个NetworkInterface对象数组.内循环通过网络接口IP地址进行迭代.

它让我思考,嵌套Parallel.ForEach循环一定是个好主意吗?阅读本文后(同一列表上的嵌套Parallel.ForEach循环?)我仍然不确定在效率和并行设计方面适用的是什么.此示例将Parallel.Foreach处理应用于列表的语句,其中两个循环都在该列表上执行操作.

在我的例子中,循环正在做不同的事情,所以,我应该:

  1. 使用嵌套的Parallel.ForEach循环?
  2. 父循环上的User Parallel.ForEach并保持内循环原样?

.net c# concurrency performance task-parallel-library

23
推荐指数
1
解决办法
2万
查看次数

并行广度优先搜索

我正在比较两种广度优先搜索算法的执行时间差异。平行和非平行。但对于我制作的每张图,非并行版本都比并行版本快 10 倍。

这是并行的广度优先搜索。我不知道问题出在哪里,但我想这个方法中的某个地方:

public static int PBFS(Node start, Node end)
{
    var queue = new ConcurrentQueue<Node>();
    queue.Enqueue(start);

    while (queue.Count != 0)
    {
        bool isFinished = false;
        if (isFinished) break;

        Parallel.ForEach<Node>(queue, CurrentNode =>
        {
            if (queue.TryDequeue(out CurrentNode))
            {
                foreach (Node Child in CurrentNode.Children.Keys)
                {
                    if (Child.IsVisited == false)
                    {
                        Child.IsVisited = true; 
                        if (Child == end) { isFinished = true; return; }
                    }
                    queue.Enqueue(Child);
                }
            }  
            return;
        });
    } return 1;
}
Run Code Online (Sandbox Code Playgroud)

这是非并行 BFS:

public static int BFS(Node start, Node …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing breadth-first-search parallel.foreach

2
推荐指数
1
解决办法
5260
查看次数