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);
}
}
Есть ли лучший подход для улучшения его производительности?