Einzelnen Beitrag anzeigen

Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#28

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 11. Feb 2010, 11:18
Zitat von hoika:
Hallo,
Wird nicht seit D2 eh nur eine Zeiger übergeben ?
Heiko
Stimmt schon (weiß zwar nicht mehr seit wann), aber trotzdem passiert Speicherverwaltungstechnisch eine ganze Menge mehr, wenn der Parameter lokal verändert werden darf.

Aus
Delphi-Quellcode:
function test1(const s:string; sep:char) :string;
begin
  Result := S;
end;
wird kurz und knapp
Code:
Main.pas.106: begin
push ebx
push esi
mov esi,ecx
mov ebx,eax

Main.pas.107: Result := S;
mov eax,esi
mov edx,ebx
call @UStrAsg

Main.pas.108: end;
pop esi
pop ebx
ret
dagegen bläht sich
Delphi-Quellcode:
function test2(s:string; sep:char) :string;
begin
  Result := S;
end;
ganz fürchterlich zu
Code:
Main.pas.101: begin
push ebp
mov ebp,esp
push ecx
push ebx
mov ebx,ecx
mov [ebp-$04],eax
mov eax,[ebp-$04]
call @UStrAddRef
xor eax,eax
push ebp
push $004a3bcc
push dword ptr fs:[eax]
mov fs:[eax],esp

Main.pas.102: Result := S;
mov eax,ebx
mov edx,[ebp-$04]
call @UStrAsg

Main.pas.103: end;
xor eax,eax
pop edx
pop ecx
pop ecx
mov fs:[eax],edx
push $004a3bd3
lea eax,[ebp-$04]
call @UStrClr
ret
jmp @HandleFinally
jmp $004a3bc3
pop ebx
pop ecx
pop ebp
ret
aus. Man muss das ja nicht alles verstehen, aber bei zeitkritischen Sachen summiert sich das ganz erheblich und man sollte es im Hinterkopf behalten. Ich schreibe inszwischen bei Strings ganz automatische immer const davor.
  Mit Zitat antworten Zitat