ASP.NET - Northwoods.GoWeb (version

(1) Is there a way to set a timeout duration for the PerformLayout() function. One of my PERT diagrams is attempting to layout 1,115 GoIconicNodes with 1,474 GoLinks. The data retrieval is about 4 seconds however PerformLayout() takes over 2 minutes.
(2) Are there hardware requirements needed to run large PERT layouts? If so please list.
(3) Is there a time correlation (that can be calculated) for PerformLayout() execution time based on number of nodes and/or links? If so please list.
(4) As the number of nodes and links increases, does the PerformLayout() execution time increases linear or exponential?
Thank you

Also note that I am using GoLayoutLayerdDigraph() as the layout format.


There are some graphs for which the LayeringOption of OptimalLinkLength can take a lot of time.

You could try different values for the PackingOption. (Although if you have enough links it will automatically take some or all of those options for you.)

Also, do you have disconnected subgraphs? If so, explicitly laying them out separately would be faster. You can use GoLayoutLayeredDigraphNetwork.SplitIntoSubNetworks().

  1. Timeout: You could override the various “principle steps” of the algorithm, and throw an exception if time was exceeded on the way in to calling the base function. I think that would work… I haven’t tried it. (this might also give you some insight into where the time is being spent.)

2, 3, 4) it depends too much on the graph, we really can’t predict reliably. It certainly goes up with nodes and links, but things like links between layers and crossings have a bigger impact.

Thank you for the quick response.

Using your suggestion in using SplitIntoSubNetworks() I came accross a new issue where the subGraphs now overlay each other.
As far as overriding the various "principle steps" in PerformLayout(), are there any examples posted?
Thanks again!

I doubt we have one sample that overrides them all, but they are listed in the GoLayout User Guide:

GoLayoutLayeredDigraph also has a number of methods that can be overridden. These can generally be divided into three categories. The first category of methods override principle steps of the layered-digraph routine: protected virtual void RemoveCycles();
protected virtual void AssignLayers();
protected virtual void MakeProper();
protected virtual void InitializeIndices();
protected virtual void InitializeColumns();
protected virtual void ReduceCrossings();
protected virtual void StraightenAndPack();
protected virtual void LayoutNodesAndLinks();

Thanks again for the quick response.

I ran with the method overrides mentioned above. The layout time was reduced by 20 seconds. Still it takes over 2 minutes to perform the layout of 1,115 GoIconicNodes with 1,474 GoLinks.
I will deal with current results. Thank you.