AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Freigabe von Objekten zeitaufwändig?
Thema durchsuchen
Ansicht
Themen-Optionen

Freigabe von Objekten zeitaufwändig?

Ein Thema von mjenke · begonnen am 9. Aug 2010 · letzter Beitrag vom 31. Aug 2010
 
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#14

AW: Freigabe von Objekten zeitaufwändig?

  Alt 31. Aug 2010, 08:29
Um noch eine letzte Rückmeldung zu geben - für den Fall, dass es noch einen interessiert - inzwischen ist auch die letzte Bremse beseitigt.

Kurzer Hintergrund: Die Anwendung plant an Hand von BoundingBoxen die Verteilung von Anzeigen innerhalb eines Katalogs. Dabei stehen verschiedene Anzeigen in einer Beziehung zueinander und müssen nach bestimmten Regeln auf gleichen, vorhergehenden oder nachfolgenden Doppelseiten platziert werden. Die Daten kommen als XML an, werden verarbeitet und es wird XML wieder weggeschrieben.

Um verschiedenste Umbruchvarianten durchzuprobieren, werden baumartig verschiedene Umbruchzweige geöffnet und die Anzeigen (da sie innerhalb jeder Umbruchvariante angepackt und mit Zusatzdaten versehen werden) geklont. Um es kurz zu machen: Die Anwendung klont wie wahnsinnig und erzeugt viele, viele, viele, viele Objekte.

Innerhalb des Klonens einer Anzeige gab es ein letztes Problem:
  • Zu einer Anzeige gibt es Schnittkanten. Diese Schnittkanten geben vor, wo eine Anzeige zerteilt werden darf, um in mehreren Blöcken auf der Seite zu erscheinen
  • Die Schnittkanten werden bei der Erzeugung des Objektes durch Analyse des übergebenen XML erzeugt

Also etwa:
Code:
TUmbrObjekt.Create ( XML: IXMLDOMNode );
begin
  [...]
  AnalyzeXml ( XML );     // Analyse des uebergebenen XML
  [...]
end;
Die Methode AnalyzeXML ist dann dafür zuständig, dass die entsprechenden Unterobjekte, welche die einzelnen Schnittkanten repräsentieren, erzeugt werden.

Grob gesagt (handelt sich hier um eine extreme Vereinfachung) habe ich also ein Objekt folgenden Aufbaus:
Code:
TUmbrObjekt = class
  [...]
  private
    FXML: IXMLDOMNode;  // Hier wird das XML der Initialisierung vorgehalten
    FSchnittkanten: Array Of TSchnittkante;
  [...]
end;
Das Objekt kann sich selbst aber auch klonen. Und dabei bin ich folgendermaßen vorgegangen:
Code:
function TUmbrObjekt.Clone: TUmbrObjekt;
var
  i: Integer;
begin
  Result := TUmbrObjekt.Create ( FXML );
  for i := 0 to High ( FSchnittkanten ) do begin
    // self.FSchnittkanten[i] an Result anhängen
  end;
end;
Und genau darin lag der Fehler: Sowohl im Create werden Schnittkanten durch das XML erzeugt, als auch während des Klon-Vorgangs zusätzlich noch einmal an den Klon angehängt. Auf diese Weise habe ich die Anzahl der Unterobjekte explosionsartig vermehrt.

Nachdem ich das aufgeräumt hatte, konnte ich die Bearbeitungszeit dramatisch verkürzen. Aus den ursprünglichen knapp 80 Minuten wurden bei gleichen Daten 1,5 Minuten. Mit dem Gesamtdatenbestand, der letzten Endes einen Katalog von etwa 800 Seiten erzeugt, schrumpfte die Bearbeitungszeit von über 4 Stunden auf 5 Minuten.

Vielen Dank für die Hilfe!!!!

Matthias Jenke
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz