Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   GraphViz und Delphi via Shell execute (https://www.delphipraxis.net/187962-graphviz-und-delphi-via-shell-execute.html)

bernhard_LA 19. Jan 2016 17:12


GraphViz und Delphi via Shell execute
 
unsere Anwendung führt Graphen basierte Algorithmen aus. Dem Anwender möchten wir Ergebnisse (Graphen) als Ergebnis darstellen. Wir haben aktuell
das Tool Graph Viz ( http://graphviz.org/) in Verwendung. Wir schreiben den Graphen als Textdatei und rufen dan GraphViz via Shell execute auf , alles ziemlich ähnlich zu ( http://sourceforge.net/projects/gengraph/)


Delphi-Quellcode:
  if not FileExists(DotExe) then
    Exit(-1);

  Tmp := IncludeTrailingPathDelimiter(GetUniqueTempFolder('~instgraph'));
  ForceDirectories(Tmp);
  Source.SaveToFile(Tmp + 'tmp.dot');

  { Generate parameters }
  Params := '';
  if (gmOutputPNG in Modes) then
  begin
    Params := Params + '-Tpng -o' + Tmp + 'output.png ';
  end;
  Params := Params + Tmp + 'tmp.dot'; // Input-file

  { Do execution }
  ExecAndWait(FDotExe, Params, 'open', True, SW_HIDE);

  { Parse results }
  if (gmOutputPNG in Modes) then
  begin
    Png.LoadFromFile(Tmp + 'output.png');
  end;

  DelTree(Tmp);

Für kleine Graphen funktioniert unsere Anwendung super , für mittlere Graphen ( 1000 ... 5000 Knoten und 1000 Kanten kann man nicht mehr auf das Bild warten, die Rechenzeit geht nach unendlich :( obwohl die Textdaten des Graphen nach wenigen Sec. im TMemofeld in unserer Anwendung bereits angezeigt werden.
Hierzu nun folgende Fragen :

a) kann dies an unserem code liegen, habe ich irgendwo einen Performance Blocker eingebaut ?

b) kennt jemand Tricks um GraphViz zu beschleunigen

c) gibt es Parameter zum Beschleunigen der Erstellung der *.png Datei ?

TiGü 20. Jan 2016 10:34

AW: GraphViz und Delphi via Shell execute
 
Zitat:

Zitat von bernhard_LA (Beitrag 1327514)
a) kann dies an unserem code liegen, habe ich irgendwo einen Performance Blocker eingebaut ?

b) kennt jemand Tricks um GraphViz zu beschleunigen

c) gibt es Parameter zum Beschleunigen der Erstellung der *.png Datei ?

a) Das Erstellen der Textdatei ist ja nicht das Problem, sondern die Verarbeitung von GraphViz mit den bisherigen Parametern.
Ihr rennt da wahrscheinlich mit dieser Größenordnung von Knoten und Kanten in Grenzfälle.
Schau mal, ob dich das hier weiterbringt:
http://www.graphviz.org/content/hier...ber-nodesedges

c) Ist die Dauer abhängig von der Größe der PNG (Höhe und Breite in Pixeln)?
Also, dauert das Erstellen des 1000 Knoten Graphen auf 10 x 10 Pixel genauso lange wie auf einen Bild mit FullHD-Auflösung?

grizzly 20. Jan 2016 12:35

AW: GraphViz und Delphi via Shell execute
 
Hi!

Dasselbe Problem habe ich auch in meinem UnitUsage. Bei Analysen großer Projekte wird die Software fast unbedienbar. dot.exe lässt sich dann doch etwas Zeit :?
Die Größe des Bitmaps spielt nur untergeordnet eine Rolle: Bei zu großen Bildern bekomme ich Probleme mit dem Speicherplatz, aber das kann dafür trotzdem schnell gehen. :wink:

Wenn's da mal einen Trick gibt, um das zu Beschleunigen, würd' mich das auch interessieren...

Edit: Ich sehe gerade, ihr verwendet den Output in Form von png Dateien. Da hat TiGü natürlich recht, es könnte schon interessant sein, ob dot da irgendwie auf die Größe reagiert. In meinem Tool nehme ich den Text-Output von dot und zeichne den Graphen selber - da habe ich dann kein Problem mit dem Zoom, oder Interaktionen.

Gruß
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz