AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Faszination Stringlist und Zeichen zählen
Thema durchsuchen
Ansicht
Themen-Optionen

Faszination Stringlist und Zeichen zählen

Ein Thema von Ghostwalker · begonnen am 6. Jan 2008 · letzter Beitrag vom 6. Jan 2008
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 10:35
Einfach aus einer Laune heraus hab ich mal 2 Funktionen geschrieben, die mir die Anzahl der Zeichen (ohne Zeilenumbruch) in einer Stringlist ausgeben.


Funktion 1:

Delphi-Quellcode:
function GetCharCountInList(AList:TStrings):int64;
var
  i : integer;

begin
  result := 0;
  for I := 0 to Alist.count - 1 do
    result := result+length(alist.strings[i]);
end;
Funktion 2:

Delphi-Quellcode:
function GetCharCountInList2(AList:TStrings):Int64;
begin
  result := length(Alist.Text)-((alist.count)*2);
end;

Eigentlich sollte man doch meinen, das Funktion 2 wesentliche schneller ist, als Funktion 1 (selbstredend ohne Optimierung des Compilers !).

Pustekuchen. Funktion 1 ist um Längen schneller (gemessen bei 100000 Aufrufen).

Kann mir das mal bitte einer erklären ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 10:40
AList.text setzt erstmal alle einzelnen Strings zusammen, dafür wird speicher reserviert, usw. das braucht einiges an Zeit.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 10:41
Hai Ghostwalker,

ein Grund dürfte wohl sein das die Eigenschaft .Text von TStrings erst beim Zugriff über die Gettermethode GetTextStr zusammen gesetzt wird (und das jedes mal wenn man .Text ausliest!). Auch dort wird in einer Schleife über alle Strings gegelaufen und diese werden zu einem zusammen gesetzt.

BTW: Wenn Du in deiner ersten Funktion nicht jedesmal den Wert von Result änderst sonder alles mit einer Variablen in machst und diese erst zum schluss dem Funktionsergebniss zuweisst dürfte das ganze noch etwas schneller werden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 10:44
Interessant.....da könnte man doch glatt mal überlegen, eine etwas...optimiertere Variante der Stringlist zu bauen.


Danke erstmal für eure Antworten
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 11:19
Hai Sharky

Zitat von Sharky:

BTW: Wenn Du in deiner ersten Funktion nicht jedesmal den Wert von Result änderst sonder alles mit einer Variablen in machst und diese erst zum schluss dem Funktionsergebniss zuweisst dürfte das ganze noch etwas schneller werden.
kannst Du das bitte mal erklären, wo da der Unterschied sein soll ? Meines Erachtens ist result auch nur eine "Variable" auf dem Stack. Wo soll denn da der Geschwindigkeitsunterschied her kommen ?

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 11:31
Zitat von thkerkmann:
kannst Du das bitte mal erklären, wo da der Unterschied sein soll ? Meines Erachtens ist result auch nur eine "Variable" auf dem Stack. Wo soll denn da der Geschwindigkeitsunterschied her kommen ?
Genauer gesagt ist es hier sogar eine Variable in einem Register, da kann man an Geschwindigkeit nichts mehr gewinnen
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 12:10
Hallo,
Zitat von Dax:
Zitat von thkerkmann:
kannst Du das bitte mal erklären, wo da der Unterschied sein soll ? Meines Erachtens ist result auch nur eine "Variable" auf dem Stack. Wo soll denn da der Geschwindigkeitsunterschied her kommen ?
Genauer gesagt ist es hier sogar eine Variable in einem Register, da kann man an Geschwindigkeit nichts mehr gewinnen
kann man eben doch. Result ist quasi der Delphi-Variablenname für das Register eax. Wenn man in der Funktion nun Result verwendet, wird dieses Register blockiert und muss bei einem Funktionsaufruf (z. B. Length) auf dem Stack gesichert und danach wieder geladen werden. Das kostet Zeit.

Wenn man hingegen Result erst am Schluss verwendet, steht eax in der gesamten Funktion zur Verfügung.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 12:14
Ich bin bisher davon ausgegangen, dass Delphi alle verfügbaren Register nutzt.. Tut es das nicht und benennt Result notfalls für die Funktion in EDX um, weil das eben immer frei ist, zum Beispiel?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 12:19
Darf ich mal bei eurem Disput kurz einhaken?

1. Hier wird als Result:int64 benutzt. Da reicht nicht ein Register.
2. Ist auch Delphi so schlau, und legt u.U Result auf den Stack, wenn es sein muss (hier ist es so)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Faszination Stringlist und Zeichen zählen

  Alt 6. Jan 2008, 12:26
Hi,

@Xaraomz:
ich habs mir mal im CPU Window angeschaut... Schätze weil das Funktionsergebnis als int64 deklariert ist trifft deine Annahme nicht zu. Die beiden Varianten sind ziemlich identisch. Egal ob result oder eine variable verwendet wird.

Könnte sein wenn's nur normaler integer wäre.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:31 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