AGB  ·  Datenschutz  ·  Impressum  







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

Format-Funktion zu langsam

Ein Thema von Jelly · begonnen am 25. Jan 2005 · letzter Beitrag vom 27. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

Format-Funktion zu langsam

  Alt 25. Jan 2005, 11:14
Für eine simulation muss ich eine 200x200x200=800.000 Werte in einer Textfile speichern. Dazu ruf ich 800.000 mal die Format-Funktion auf:
format('%.4f ',[C[Nr]]) ; Das dauert aber ELEND lange... Gibts da nicht eine Methode, die da wesentlich schneller arbeitet... FloatToStr bringt mir auch nix.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 11:18
Hi,

evtl. ist Str() schneller..?

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 11:26
Zitat von Jelly:
200x200x200=800.000
Das mit dem Diplom (oder Doktor ) wird nichts! 200^3 = 8.000.000 (8 Millionen!)

Unabhängig davon, sind ca. 13 Sekunden für 8Mio Werte wirklich zu viel?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Start, Stop, Freq: Int64;
  I: Integer;
  Id: Double;
begin
  QueryPerformanceCounter(Start);
  for I := 1 to 8000000 do
  begin
    Id := I;
    Format('%.4f', [Id]);
  end;
  QueryPerformanceCounter(Stop);
  QueryPerformanceFrequency(Freq);
  Label1.Caption := Format('%f ms', [(Stop - Start) * 1000 / Freq]);
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 12:55
Zitat von Jelly:
Gibts da nicht eine Methode, die da wesentlich schneller arbeitet... FloatToStr bringt mir auch nix.
FormatFloat sollte deutlich schneller sein, da dass Parsen des Formatstrings entfällt.
Daneben gibt es noch: FloatToStrF und FloatToDecimal & FloatToText
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 12:59
Zitat von sakura:
Zitat von Jelly:
200x200x200=800.000
Das mit dem Diplom (oder Doktor ) wird nichts! 200^3 = 8.000.000 (8 Millionen!)
Dann verlängert sich die Rechenzeit ja nochmals um den Faktor 10

Zitat von sakura:
Unabhängig davon, sind ca. 13 Sekunden für 8Mio Werte wirklich zu viel?
Das ist echt seltsam? Bei mir dauerts über ne halbe Stunde. Lass ich die format Funktion weg, und schreibe direkt immer 1.0000 als Wert, dauerts paar Sekunden Also da bin ich jetzt etwas überfragt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 14:10
Zeig mal den Code drumherum.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 15:12
Zitat von Luckie:
Zeig mal den Code drumherum.
Ich habe das eben mal mit diesem Code gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Start, Stop, Freq: Int64;
  ndx : Integer;
  sl : TStringList;
  Id: Double;
begin
  QueryPerformanceCounter(Start);
  sl := TStringList.Create;
  try
    for ndx := 1 to 8000000 do
    begin
      Id := ndx;
// sl.Add (FloatToStr (id)); // Variante 1
// sl.Add(Format('%.4f', [Id])); // Variante 2
      sl.Add(FormatFloat('########.0000',ID)); // Variante 3
    end;
    QueryPerformanceCounter(Stop);
    QueryPerformanceFrequency(Freq);
    Label1.Caption := Format('%f ms', [(Stop - Start) * 1000 / Freq]);
    sl.SaveToFile('c:\liste3.txt');
  finally
   sl.Free;
  end;
end;
Variante 1 : 5.671 ms
Variante 2 : 7.143 ms
Varinate 3 : 7.657 ms
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Format-Funktion zu langsam

  Alt 25. Jan 2005, 15:20
Zitat von Luckie:
Zeig mal den Code drumherum.
Delphi-Quellcode:
    { 3D-Matrix mit Parametern }
    for Nr := 1 to 2 do begin
        for iz := 0 to G.z-1 do begin
           V_line[Nr] := format('%s (:,:,%d) = [',[A[Nr],iz+1]) ;
           for ix := 0 to G.x-1 do begin
              for iy := 0 to G.y-1 do with Thread.Cells[ix,iy,iz] do begin
                 V_line[Nr] := V_line[Nr] + FloatToStrF (C[Nr],ffFixed,7,4) + ' ' ; // langsam, heisst ung. 20 min.
                 //V_line[Nr] := V_line[Nr] + '0.0001 ' ; // schnell, par Sekündchen
                 if (iy = G.y-1) and (ix < G.x-1) then begin
                    V_line[Nr] := V_line[Nr] + '; ' ;
                 end ;
              end ;
           end ;
           V_line[Nr] := V_line[Nr] + '] ;' ;
           Add (V_line[Nr]) ;
           V_line[Nr] := '' ;
        end ;
        Add ('') ;
    end ;
Die Add Methode... FS ist ein TFileStream:

Delphi-Quellcode:
procedure TMCBasisExport.Add(AText: string);
var
 buf : string ;
begin
     if FS <> nil then begin
         buf := AText+#13#10 ;
         FS.Write(buf[1],length(buf)) ;
     end else begin
         raise exception.Create('Datei kann nich beschrieben werden.');
     end ;end;
An der Add Methode kanns aber meiner Ansicht nach nicht liegen, da die ja auch aufgerufen wird, wenn ich Format weglasse, und direkt einen Wert schreibe.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Format-Funktion zu langsam

  Alt 26. Jan 2005, 11:02
[quote="Jelly"]
Delphi-Quellcode:
    { 3D-Matrix mit Parametern }
    for Nr := 1 to 2 do begin
        for iz := 0 to G.z-1 do begin
           V_line[Nr] := format('%s (:,:,%d) = [',[A[Nr],iz+1]) ;
           for ix := 0 to G.x-1 do begin
              for iy := 0 to G.y-1 do with Thread.Cells[ix,iy,iz] do begin
                 V_line[Nr] := V_line[Nr] + FloatToStrF (C[Nr],ffFixed,7,4) + ' ' ; // langsam, heisst ung. 20 min.
                 //V_line[Nr] := V_line[Nr] + '0.0001 ' ; // schnell, par Sekündchen
Deine Auskommentierung ist nicht fair, da du den Zugriff auf das Array C[] nicht berücksichtigt:
Delphi-Quellcode:
// Variante 1
V_line[Nr] := V_line[Nr] + FloatToStrF (C[Nr],ffFixed,7,4) + ' ' ;

// Variante 2 (ohne FloatToStrF)
dummy_float := C[Nr]; // optimierung des compilers ausschalten, sonst wird wegoptimiert
// und da da Array C[] wohl zu Thread.cells gehört, wird dies wohl die Hauptursache
// für dein Performanceproblem sein !!!
V_line[Nr] := V_line[Nr] + '0.0001 ' ;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Format-Funktion zu langsam

  Alt 26. Jan 2005, 12:52
@shmia: hättest du Recht haben können... Habs aber grad getestet, und das ändert aber nichts am Verlauf
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:04 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