AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Schneller Code - Von Delete und Insert -> Copy -> ???
Thema durchsuchen
Ansicht
Themen-Optionen

Schneller Code - Von Delete und Insert -> Copy -> ???

Ein Thema von -Lucky- · begonnen am 6. Mai 2008 · letzter Beitrag vom 8. Mai 2008
 
-Lucky-

Registriert seit: 4. Mai 2008
28 Beiträge
 
Delphi 7 Enterprise
 
#1

Schneller Code - Von Delete und Insert -> Copy -> ???

  Alt 6. Mai 2008, 21:33
Ich gebe gerade alles um meinen Quellcode so effektiv wie möglich zu machen. Kurz zum Thema, mein Programm führt ein paar Millionen Prozesse aus, was genau tut nix zur Sache.

Vor einiger Zeit bin ich schon dahinter gestiegen, dass Delete und Insert ein großes Problem darstellen. Bei mehreren Tausend aufrufen ist schon spürbar eine lange Zeitdauer erkennbar. Diesbezüglich habe ich Insert und Delete schon entfert und durch andere Prozeduren ersetzt. Durch die Funktion Copy war dies schon eine einfache Lösung, es geht nun um ein x faches schneller, aus mehreren Tagen Arbeitszeit wurden wenige Minuten - lol -

Nun wäre es aber optimal, wenn wir Copy auch noch durch etwas anderes in irgendeiner weise ersetzen können. Denn Copy dauert mir auch viel zu lange um es auf den Punkt zu bringen. Aber ich weiß auch, dass man nicht alles im Leben haben kann

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var text1,text2: string;
i: integer;
begin
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
    text2 := copy(text1,20000,500000) + copy(text1,1,19999) + copy(text1,500001,length(text1));
  end;
  ShowMessage('Fertig');
end;
-->> Dies dauert knapp 3 Sekunden

Ein Versuch Copy effektiver zu machen scheiterte jedoch

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var text1,text2: string;
i,j: integer;
begin
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    text2 := '';
    text1 := FileToString('abc.xyz'); // große Datei als temp. Datenquelle
    for j := 20000 to 500000 do
    text2 := text2 + text1[j];
    for j := 1 to 19999 do
    text2 := text2 + text1[j];
    for j := 500001 to length(text1) do
    text2 := text2 + text1[j];
  end;
  ShowMessage('Fertig');
end;
Dies dauert nun ca. 62 Minuten, damit habe ich also das Gegenteil erreicht von dem, was ich erreichen wollte.

Würde man dies oben, statt mit Copy, durch Delete und Insert versuchen zu erreichen, dann würde der ganze Prozess halt auch keine 3 Sekunden mehr dauern, sondern um einiges Länger. Wer mir nicht glaubt, einfach ausprobieren, hab hierfür auch nen Analyseprogramm geschrieben.

Nun ist die Frage, ob wir etwas noch effektiveres als Copy finden. Ich weiß, dass Copy im Vergleich zu Delete und Insert sehr, sehr effektiv ist, als schnelle Alternative. Aber könnte man das noch etwas umschreiben dass man hier noch schneller arbeitet?

Wenn das Programm einige Milliarde Zeichenketten analysieren soll, dann dauert dies so immer noch zu lange, da bin ich Opa bevor ich das Ergebnis habe

Sollte jedoch insgesammt nicht länger dauern, als dass man zwischendurch nen trinken kann. Max. ne Stunde. Falls euch da was schnelleres einfällt, einfach sagen. Der Quellcode oben dient nur zum Zeitmessen, hat also keine Bedeutung. Die Datei ist ca. 12MB groß und besteht aus sinnlosen Daten.
  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 01:59 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