![]() |
Delphi-Version: 7
Delphi langsam
Hallo,
habe mit einem Kollegen mal einen kleinen Test durchgeführt. Wollte mal die performance von inttostr() testen im Vergleich zu itoa() von C++. Delphi:
Delphi-Quellcode:
C++
program Project2;
{$APPTYPE CONSOLE} uses windows, sysutils; var i,j : Integer; c, cbuf : DWORD; s : AnsiString; begin c := GettickCount; for I := 0 to 5650 do begin for j := 0 to 9930 do begin s := Itoaj); s := IntToStr(j-i); end; cBuf := GetTickCount; end; cbuf := GetTickCount; writeln(cbuf-c); readln; end.
Code:
int i,j;
unsigned c, cbuf; char s[200]; c = GetTickCount(); for(i = 0; i <= 5650; i++){ for(j = 0; j <= 9930; j++){ _itoa(j,s,16); _itoa(j-i,s,16); } cbuf = GetTickCount(); } cbuf = GetTickCount(); printf("%u",cbuf-c); Sleep(1000000); return 0; Ergenisses : ![]() C++ ~ 9 Sekunden schneller?????? Wie geht das denn?^^ |
AW: Delphi langsam
Tja, das kann schon an kleinen Details liegen.
Ein Punkt ist z.B. dass du sehr oft GetTickCount aufrufst. Du misst also nicht nur die Performance von Inttostr() sondern auch wie schnell dieser API Aufruf geht. Und dann könntest du es in Delphi auch nochmal mit einem Shortstring probieren. Bei dem Ansistring ist noch ein bisschen Compilermagic drin. :arrow:
Delphi-Quellcode:
String[200]
Ich habe das gerade mal auf die schnelle mit C# nachprogrammiert: In der VM: 15,3s ohne VM 13,3s - ja und? |
AW: Delphi langsam
Zitat:
GetTickcount wird ja auch in C++ aufgerufen.. |
AW: Delphi langsam
Und hast du auch bei C++ einen 10 jahre alten Compiler verwendet?
Wenn du dein Delphi pimpen willst schau dir mal das ![]() AFAIK haben auch Delphi-Versionen die nicht aus der Mittelalter der Entwicklung stammen einige Performance-Boosts bekommen (habe ich vor kurzen beim Performancevergleich Widestring (D6) mit (Unicode-)String von XE2 bemerkt. |
AW: Delphi langsam
Ersteinmal darfst du keine Äpfel mit Birnen vergleichen :!:
itoa entspricht ja eher den Prozeduren ![]() ![]() aber nicht den Funktionen IntToStr und StrToInt. Eine Variable als VAR-Parameter zuübergeben und "nur" zu verändern ist was total Anderes, als eine zweite Variable komplett neu zu erzeugen und die Andere zu löschen/überschreiben. Und ich empfehle dir dringend mal FastMM zu besorgen. (in "aktuellen" Delphis ist absichtlich, seit bestimmt schon über 8 Jahren, der alte DelphiMM dadurch ersetzt wurden) Und Deine Aussage war so auch nicht aussagefähig, denn wenn das Ganze 2 Tage gebraucht hätte, dann wären 5 Seknden garnichts. PS: Du weißt daß man die Zahlen abschreiben oder gar kopieren und sie "direkt" neben de 5 Sekunde-Bemerkung hätte schreiben können? (Das Bild war eh nicht nötig, bei den wenigen Informationen)
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE} uses Windows, SysUtils; var i, j : Integer; c, cbuf : DWORD; s : AnsiString; s2 : ShortString; begin c := GetTickCount; for i := 0 to 5650 do for j := 0 to 9930 do begin s := IntToStr(j); s := IntToStr(j-i); end; cbuf := GetTickCount; WriteLn(cbuf-c); c := GetTickCount; for i := 0 to 5650 do for j := 0 to 9930 do begin Str(j, s); Str(j-i, s); end; cbuf := GetTickCount; WriteLn(cbuf-c); c := GetTickCount; for i := 0 to 5650 do for j := 0 to 9930 do begin Str(j, s2); Str(j-i, s2); end; cbuf := GetTickCount; WriteLn(cbuf-c); ReadLn; end. |
AW: Delphi langsam
Zitat:
@himitsu Wieder was gelernt. Str() + ShortString ist dann sogar 1 Sekunde schneller als das C++ Programm.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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