AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi langsam

Ein Thema von Lyan · begonnen am 20. Nov 2012 · letzter Beitrag vom 21. Nov 2012
Antwort Antwort
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

Delphi langsam

  Alt 20. Nov 2012, 21:05
Delphi-Version: 7
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:
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.
C++

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 :

http://www0.xup.in/exec/ximg.php?fid=15400968

C++ ~ 9 Sekunden schneller??????

Wie geht das denn?^^

Geändert von Lyan (20. Nov 2012 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Delphi langsam

  Alt 20. Nov 2012, 21:19
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. String[200]
Ich habe das gerade mal auf die schnelle mit C# nachprogrammiert: In der VM: 15,3s ohne VM 13,3s - ja und?
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#3

AW: Delphi langsam

  Alt 20. Nov 2012, 21:26
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. String[200]
Ich habe das gerade mal auf die schnelle mit C# nachprogrammiert: In der VM: 15,3s ohne VM 13,3s - ja und?
hatte es anfangs auch mitnem shortstr.. naja wie auch immer, finds es nur komisch bzw. frage mich wi ich die effiziez steigern könnte.
GetTickcount wird ja auch in C++ aufgerufen..
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Delphi langsam

  Alt 20. Nov 2012, 21:38
Und hast du auch bei C++ einen 10 jahre alten Compiler verwendet?

Wenn du dein Delphi pimpen willst schau dir mal das FastCode-Projekt an

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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi langsam

  Alt 20. Nov 2012, 22:06
Ersteinmal darfst du keine Äpfel mit Birnen vergleichen

itoa entspricht ja eher den Prozeduren Delphi-Referenz durchsuchenStr und Delphi-Referenz durchsuchenVal,
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.
$2B or not $2B

Geändert von himitsu (20. Nov 2012 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#6

AW: Delphi langsam

  Alt 21. Nov 2012, 20:45
Zitat:
Und hast du auch bei C++ einen 10 jahre alten Compiler verwendet?
Nunja, bedauerlicherweise war Delphi 2010 noch 3 Sekunden langsamer als D7.

@himitsu
Wieder was gelernt. Str() + ShortString ist dann sogar 1 Sekunde schneller als das C++ Programm..

Geändert von Lyan (22. Nov 2012 um 10:44 Uhr)
  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 14:17 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