Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Performance: mein Programm trödelt! (https://www.delphipraxis.net/204596-performance-mein-programm-troedelt.html)

himitsu 10. Jun 2020 16:59

AW: Performance: mein Programm trödelt!
 
Die Lizenz für's kleine CodeSite Express ist immernoch mit dabei, wenn ich mich nicht täusche. (kann via GetIt installiert werden)

DieDolly 10. Jun 2020 18:11

AW: Performance: mein Programm trödelt!
 
Zitat:

Bei meinem XE5 war dieses "CodeSite Logging" dabei.

Zusammen mit "now" (?) irgendwann am Anfang und dann weiteren Stellen im Ablauf lasse ich mir die Zeitwerte (Differenzen) via Codesite ausspucken. So habe ich bisher alle Bremsen gefunden.
Braucht man für sowas wirklich CodeSite? NicoleWagner hat schon vor einigen Posts bewiesen, das es auch ganz anders geht.

jaenicke 10. Jun 2020 19:15

AW: Performance: mein Programm trödelt!
 
Irgendwie fehlt hier noch die einfachste Variante... das passiert doch auch auf dem Entwicklungs-PC:
Einfach starten und in den 3-4 Sekunden Wartezeit auf Pause drücken und dann schauen wo man dort gerade ist.

Bei so langen Verzögerungen klappt das mit ein paar Versuchen normalerweise sehr gut.

TurboMagic 10. Jun 2020 19:50

AW: Performance: mein Programm trödelt!
 
Zitat:

Zitat von himitsu (Beitrag 1466973)
DateTime/String (vor allem für längere Logs), GetTickCount und es git auch eine neuere Stopuhrklasse, deren Name ich immer vergesse.

TStopwatch aus System.Diagnostics.
Und für's Logging ist seit vielen Versionen CodeSite Lite dabei.
Funktioniert unter Windows ganz gut.

NicoleWagner 10. Jun 2020 19:51

AW: Performance: mein Programm trödelt!
 
In meinem Fall hilft das sehr wahrscheinlich nicht, das in-den-Code-springen. Ich habe mittlerweile ein paar "verdächtige" begin / end gefunden.
Heute bin ich schon zu müde, doch ich habe den Eindruck, dass ich irgendeine Schleife zu groß gezogen habe.

Also statt
for i:1 to 1000 do begin
for j:=1 to 100 do begin end
mach-was
begin
und-dann-noch-ein-Methodenaufruf-in-Schleife
end
end
end?!

Wäre das mach-was-end irgendwohin verrutscht beim Debuggen und es wären dann 100.000 Durchläufe mehr als nötig...
Dass da oben "was" nicht stimmt, sieht jeder auf den ersten Blick. Das richtige end zu löschen, das braucht einen zweiten Blick.

TurboMagic 10. Jun 2020 19:52

AW: Performance: mein Programm trödelt!
 
Zitat:

Zitat von Sherlock (Beitrag 1466976)
Delphi-Referenz durchsuchenTStopwatch ist eine ganz Super Sache.
Und auf jeden Fall (ich lasse mich da auf keine Diskussionen rund um Sonderfälle ein) immer #13#10.

Sherlock

In Unit System gibt's die schöne Konstante sLineBreak.Die passt auf jeder Plattform ;-)

DieDolly 10. Jun 2020 19:58

AW: Performance: mein Programm trödelt!
 
Delphi-Quellcode:
for i:1 to 1000 do begin
for j:=1 to 100 do begin end
mach-was
begin
und-dann-noch-ein-Methodenaufruf-in-Schleife
end
end
end?!
Zitat:

Wäre das mach-was-end irgendwohin verrutscht beim Debuggen und es wären dann 100.000 Durchläufe mehr als nötig...
Dass da oben "was" nicht stimmt, sieht jeder auf den ersten Blick. Das richtige end zu löschen, das braucht einen zweiten Blick.
Das da oben sieht richtig formatiert so aus
Delphi-Quellcode:
 for i: 1 to 1000 do
  begin
   for j := 1 to 100 do
    begin
    end
    // mach-was
    begin
     // und-dann-noch-ein-Methodenaufruf-in-Schleife
    end
  end
end ?!
Im Prinzip ist da alles falsch. Code-formatierung kann einem solche Probleme ersparen.

Richtig vielleicht so? Ich weiß ja nicht, wp du i und j verwendest
Delphi-Quellcode:
for i := 1 to 1000 do
  begin
   for j := 1 to 100 do
    begin
     // mach-was

     // und-dann-noch-ein-Methodenaufruf-in-Schleife
    end
  end;
Ab und zu STRG+D

NicoleWagner 11. Jun 2020 09:35

AW: Performance: mein Programm trödelt!
 
...dass das "richtig formatiert" so aussieht, wissen hier wohl viele, auch ich.
Nur war mir die Spielerei in html zu mühsam.
Dass zu sagen, ist nicht der Grund, warum ich poste.
Sondern ich poste eine Erfolgsmeldung: Ich hab's!

Es war ein "begin-end" zu wenig.
Jenes, das schlank und rank über 2 Zeilen hätte laufen sollen, ging mir in eine riesige Schleife.

Wie passiert so etwas?
Man folgt der Embacadero Richtlinie nicht, jede einzelne Zeile in begin - end einzuschließen, weil das sooo viele Codezeilen macht.
Man schreibt also:
If.... then... ;
Dann - fällt einem noch etwas ein.

Richtig wäre jetzt natürlich gewesen:

if .... then
begin
1.....;
2.....;
end;

Man schrieb aber zu später Stunde:
if then
1....;
2....;

Autsch.
Dieser 2. Befehl läuft dann durch die ganze Ober-Schleife.

Meine Anwendung startet jetzt wieder im Wimpernschlag statt in einigen Sekunden.

PS: Ich schreibe auch " s:= ' ' + #10#13 + ' '; "
Zuweilen geht das nicht und dann fand ich (glaublich sogar hier) einen Trick: Man legt ein "Label" dorthin, wo es nicht klappt und schreibt nicht auf den schlechten Untergrund, sondern aufs Label.

und PPS:
Die Zeitmessung mit "now"-Zuweisung fand die auslösende Stelle NICHT. Da mag die Code-Optimierung daran schuld sein.

Moombas 11. Jun 2020 10:02

AW: Performance: mein Programm trödelt!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1467041)
Man folgt der Embacadero Richtlinie nicht, jede einzelne Zeile in begin - end einzuschließen, weil das sooo viele Codezeilen macht.
Man schreibt also:
If.... then... ;
Dann - fällt einem noch etwas ein.

Richtig wäre jetzt natürlich gewesen:

if .... then
begin
1.....;
2.....;
end;

Deswegen habe ich mir angewöhnt, das generell zu machen, damit so etwas nicht passieren kann.
Man muss nicht mal etwas vergessen, sondern es kann eine nachträgliche Ergänzung sein, die mehr erfordert.

TurboMagic 11. Jun 2020 10:05

AW: Performance: mein Programm trödelt!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1467041)
Sondern ich poste eine Erfolgsmeldung: Ich hab's!
Meine Anwendung startet jetzt wieder im Wimpernschlag statt in einigen Sekunden.

PS: Ich schreibe auch " s:= ' ' + #10#13 + ' '; "

Super, dass du dein Problem lösen konntest.

Hier noch ein Tipp zum #10#10: es gibt da in System.pas, was ja bekanntlichermaßen immer implizit eingebunden ist,
die schöne Konstante sLineBreak. Diese enthält unter Windows genau das: #13#10 und auf den anderen Plattformen
das jeweils dort standardmäßig benutzte. Nutzung der Konstante macht also den Code ein wenig mehr Multi-Plattform
kompatibel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 Uhr.
Seite 4 von 5   « Erste     234 5      

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