Blackheart666: Hast du mal geschaut was da in dem Code eigentlich gemacht wird? Sonst wäre dir vermutlich aufgefallen, dass ein Hinweis auf GetTickCount rein gar nichts bringt. Dort wird im zweiten Fall nur der komplette Code ausgelagert. Und das ist eine so nichtige Änderung, dass man das nicht mal mit dem Performance Counter zuverlässig messen könnte. Und erst recht nicht mit einem Teil was eine 16 Millisekunden Auflösung hat und dann auch eher nur zufällige Ergebnisse liefert.
buSC: Was die Geschwindigkeit angeht brauchst du dir gar keine Gedanken machen. Die von dir durchgeführte Änderung sind das normale täglich Brot deiner CPU und werden überhaupt nicht ins Gewicht fallen. Solch eine Änderung kann man kaum wirklich messen. Abgesehen davon ist eine vernünftige Codestruktur wichtig. Die sollte man nur dann vernachlässigen, wenn es eine wirklich zeitkritische Stelle ist.
Zu den Optimierungen. Normal wäre es wohl besser dafür ein extra Thema zu machen.

Nichts desto trotz. Es kommt da meiner Meinung nach auch darauf an wie groß da Array innerhalb des Hauptarrays (arr) ist. Um so größer es ist um so mehr Daten muss er natürlich bewegen. Solltest du also eine Stelle löschen müssen alle Daten danach kopiert werden. Das einfachste wäre natürlich, wenn man die Daten nicht kopieren müsste sondern nur deren Zugriff ändern würde. Denn dann müsste bei einem Löschvorgang nicht die kompletten Daten kopiert werden sondern nur die bezüge dazu. Ich persönlich würde eher zu Pointer greifen. Aber wenn du noch nicht viel damit gemacht hast kann das verwirrend wirken und es bietet auch jedem Menge fehlerpotential.
Aber hier mal ein Beispiel was ich machen würde. Das innere Array würde ich als einen seperaten Typen (eine Klasse wäre recht einfach zu handhaben) deklarieren. Und für das Hauptarray würde ich eine TList benutzen. Zur Verwaltung von Daten bietet die schon so ein paar Optimierungen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type TItem = class Data: array of Double; end;
var List: TList; Item: TItem; begin List := TList.Create;
Item := TItem.Create; SetLength(Item.Data);
List.Add(Item);
Item := TObject(List[Idx]); Item.Free; List.Delete(Idx); List.Free; |
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.