QuickGraph занимает слишком много времени, чтобы выяснить циклическую зависимость

Я работаю над функциональностью QuickGraph и пытаюсь выяснить, является ли график циклическим. Проблема в том, что требуется слишком много времени, чтобы выяснить зависимость (более 10 минут), когда присутствует слишком много ребер.

Проблема в том, что QuickGraph не дает, где находится циклическая зависимость, когда проверяется со всеми ребрами. Поэтому мы решили проверить каждое ребро за раз.

Я пытаюсь сократить время, необходимое для поиска зависимостей. Я пытался выполнить этот код с помощью Parallel.ForEach но это не принесло никаких улучшений.

Поможет ли это, если я выполню его партиями, скажем, по 50 ребер за раз?

Фрагмент кода:

private void FindCyclicDep()
{
    _errorMessages.Clear();
    AdjacencyGraph<INode, Edge<INode>> tempGraph = new AdjacencyGraph<INode, Edge<INode>>();
    tempGraph.AddVertexRange(_graph.Vertices);
    foreach (var edge in _graph.Edges)
    {
            tempGraph.AddEdge(edge);
            bool isAcyclic = tempGraph.IsDirectedAcyclicGraph();
        tempGraph.RemoveEdge(edge);
            if (isAcyclic)
            {
                continue;
            }

            string message = "Cyclic dependency found while adding dependecy of "
                             + edge.Target.HierarchyIdentifier + ": Type " + edge.Target.TypeOfNode
                             + " on " + edge.Source.HierarchyIdentifier + ": Type " + edge.Source.TypeOfNode;
            _errorMessages.Add(message);

    } 
}

Есть ли лучший подход для улучшения его производительности?

0 ответов

Другие вопросы по тегам