Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hohe CPU auslastung bei 64Bit Anwendung (https://www.delphipraxis.net/197644-hohe-cpu-auslastung-bei-64bit-anwendung.html)

EWeiss 24. Aug 2018 00:40


Hohe CPU auslastung bei 64Bit Anwendung
 
Ich habe mein Programm kompiliert einmal in 32Bit und in 64. (CE)
Im vergleich D2010 (32Bit) 0% bei voller Auslastung.

CE 32Bit 3 > 5% und bei 64Bit 25% jetzt brat mir einer nen Storch woran liegt das .
Es ist der gleiche Quellcode nur eine andere Plattform.

Ist mir unbegreiflich.
Muss ich da beim Timer was berücksichtigen ? Oder, oder, oder.. Hmmmm.

gruss

himitsu 24. Aug 2018 01:49

AW: Hohe CPU auslastung bei 64Bit Anwendnung
 
Keine Ahnung, da niemand auch nur Ansatzweise etwas dazu sagt was überhaupt gemacht wird. :glaskugel:

EWeiss 24. Aug 2018 01:53

AW: Hohe CPU auslastung bei 64Bit Anwendnung
 
Zitat:

Zitat von himitsu (Beitrag 1411486)
Keine Ahnung, da niemand auch nur Ansatzweise etwas dazu sagt was überhaupt gemacht wird. :glaskugel:

Was soll ich da noch zu sagen..
Die 64Bit Anwendung verwendet 25% CPU beim gleichen Quelltext mehr gibt es da nicht zu sagen.
Außer das die 32Bit 0% verwendet.. aber sagte ich schon.
Bin leider nicht der 64Bit Spezialist sonst könnte ich dir mehr Auskunft geben.

Sorry.. ihr müsst nicht mehr Antworten das ist nicht das wahre mit 64Bit.
Wenn ein Hobby zur Arbeit ausartet ohne sichtbaren Erfolg dann muss man es lassen.

Die 32Bit ist 394KB groß, sie hat bei den meisten Anwendungen von mir 0% CPU Auslastung.
Die CE 64Bit Version ist 10X so groß nämlich 3.654KB und die CPU wird zu 25% Ausgelastet. Das macht keinen sinn.
Mit der Größe könnte ich noch leben aber nicht mit der CPU Auslastung.

gruss

Dalai 24. Aug 2018 03:45

AW: Hohe CPU auslastung bei 64Bit Anwendnung
 
Zitat:

Zitat von EWeiss (Beitrag 1411487)
[...] mehr gibt es da nicht zu sagen.

Doch, z.B. was das Programm tut. Und welche Versuche du bereits unternommen hast, dem auf die Spur zu kommen, z.B. Teile des Programms deaktivieren, Code auskommentieren usw. Oder im Process Explorer oder Process Hacker nachschauen, welche Funktion in welcher DLL genau die Last verursacht. Oder den Process Monitor mitschreiben lassen, welche Aktionen dein Programm macht. All das gibt Hinweise auf die Ursache.

Grüße
Dalai

EWeiss 24. Aug 2018 03:51

AW: Hohe CPU auslastung bei 64Bit Anwendnung
 
Zitat:

Zitat von Dalai (Beitrag 1411491)
Zitat:

Zitat von EWeiss (Beitrag 1411487)
[...] mehr gibt es da nicht zu sagen.

Doch, z.B. was das Programm tut. Und welche Versuche du bereits unternommen hast, dem auf die Spur zu kommen, z.B. Teile des Programms deaktivieren, Code auskommentieren usw. Oder im Process Explorer oder Process Hacker nachschauen, welche Funktion in welcher DLL genau die Last verursacht. Oder den Process Monitor mitschreiben lassen, welche Aktionen dein Programm macht. All das gibt Hinweise auf die Ursache.

Grüße
Dalai

Ich weis wo die Position ist an der die Auslastung auftritt.. ABER nicht mit der 32BIT.
Und das ist was mich stört ich kann es nicht beheben.

Hier ist der Code!
Delphi-Quellcode:
      if (ObjItem.angle <> 0) then
      begin
        GdipSetInterpolationMode(graphics, ObjItem.quality);

        GdipRotateWorldTransform(graphics, ObjItem.angle + 180, MatrixOrderAppend); //<<<< hier
        GdipTranslateWorldTransform(graphics, xD + (wD div 2), yD + (hD div 2), MatrixOrderAppend); //<<<<< und hier

        GdipDrawImageRectRectI(graphics, img, wD div 2, hD div 2, -wD, -hD, xS, yS, wS, hS, 2, imgAttr,
          ImgAbort, nil);
      end else
      begin
        GdipSetInterpolationMode(graphics, ObjItem.quality);
        GdipDrawImageRectRectI(graphics, img, PosX, PosY, wD, hD, xS, yS, wS, hS, 2, imgAttr, ImgAbort, nil);
      end;
Aber was nutzt es denn der gleiche code unter 32BIT verursacht 0% Auslastung (also insgesamt vom kompletten Programm) und 64Bit 25%

Die Funktionen dazu
Delphi-Quellcode:
  GdipTranslateWorldTransform: function(Graphics: LONG_PTR; dx: Single; dy: Single; order: GpMatrixOrder): GPSTATUS; stdcall;
  GdipRotateWorldTransform: function(Graphics: LONG_PTR; angle: Single; order: GpMatrixOrder): GPSTATUS; stdcall;
gruss

old7 24. Aug 2018 03:52

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
OverTheTaskBar 32bit 0% CPU und 6,1 MB RAM (OTTB.exe)
OverTheTaskBar 64bit 0% CPU und 6,5 MB RAM (OTTB64.exe)

Jeweils mit DelphiCE kompiliert:
OTTB.exe 2.257 KB
OTTB64.exe 3.607 KB

Ich bevorzuge 32bit, auch wenn das "Oracle VM VirtualBox"-Icon dort nicht stimmt :wink:

EWeiss 24. Aug 2018 03:55

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von old7 (Beitrag 1411493)
OverTheTaskBar 32bit 0% CPU und 6,1 MB RAM (OTTB.exe)
OverTheTaskBar 64bit 0% CPU und 6,5 MB RAM (OTTB64.exe)

Jeweils mit DelphiCE kompiliert:
OTTB.exe 2.257 KB
OTTB64.exe 3.607 KB

Ich bevorzuge 32bit, auch wenn das "Oracle VM VirtualBox"-Icon dort nicht stimmt :wink:

Kann man damit nicht vergleichen.. Sorry!
Anbei ein PIC.. da sieht man was ich meine. Beide sind von der selben Quelle.

gruss

old7 24. Aug 2018 03:59

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Kann man damit nicht vergleichen.. Sorry!
Womit nicht vergleichber und wieso denn :?:

EWeiss 24. Aug 2018 04:01

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von old7 (Beitrag 1411496)
Zitat:

Kann man damit nicht vergleichen.. Sorry!
Womit nicht vergleichber und wieso denn :?:

Siehe shot!
Mit OTTB64 habe ich jetzt alles gefixt denke ich mal was den OpenDialog angeht aber das ist ein anderes Thema. ;)

gruss

old7 24. Aug 2018 04:08

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
OK, ich dachte, du beziehst dich auf OTTB. Mehr Infos zu deinem Problem würden daher nicht schaden.

EWeiss 24. Aug 2018 04:11

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von old7 (Beitrag 1411498)
OK, ich dachte, du beziehst dich auf OTTB. Mehr Infos zu deinem Problem würden daher nicht schaden.

Ich habe alle gegeben die relevant sind.

Aber noch mal siehe den Shot und den Unterschied zwischen 32 und 64Bit.
Ich kann den Quelltext nicht verändern denn er läuft 100% mit allen meinen anderen Beispielen.
Kann mir nicht vorstellen das 4Byte (LONG_PTR) mehr für Graphics dieses Problem verursachen könnte.

Das wäre die einzige Erklärung.

gruss

hoika 24. Aug 2018 06:38

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Hallo,
Einspruch, es sind viel zu wenig Infos.

25% komplett -> sind wohl 100% CPU-Last auf einem Prozessor.

Aber Du hast es ja gefixt, leider, ohne uns zu sagen, was das Problem war.

PS:
Das der 64Bit-Compiler noch eine Baustelle ist, sollte allen klar sein.

jaenicke 24. Aug 2018 08:26

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von hoika (Beitrag 1411507)
PS:
Das der 64Bit-Compiler noch eine Baustelle ist, sollte allen klar sein.

Inwiefern?

Und bezüglich 100%:
Eine mögliche Ursache ist, wenn etwas zu oft hintereinander immer wieder gezeichnet wird. In dem Fall könnte man ein kurzes Sleep versuchen um herauszufinden ob es dann behoben ist. Zur Lösung gäbe es dann vermutlich noch eine bessere Lösung.

KodeZwerg 24. Aug 2018 08:58

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Ich würde auch vorschlagen in der Timer/Loop die Dir diese Kristalle animiert, einfach mal den Gfx Output auszukommentieren um schon mal zu erfahren ob es daran liegt.

jaenicke 24. Aug 2018 10:13

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Er hat ja schon geschrieben, dass es daran liegt. Insofern dürfte das Sleep als Ersatz für eine richtige Frameratenkontrolle zunächst helfen. Sinnvoller ist aber die Framerate direkt zu limitieren.

Nebenbei:
Lustigerweise dürfte hier die bessere Performance unter 64-Bit zu dem Problem führen, weil die Befehle so schnell abgearbeitet werden, dass diese viel öfter hintereinander ausgeführt werden als unter 32-Bit. Und wenn man diese Framerate dann nicht begrenzt, wird halt alles genutzt was da ist.

Zacherl 24. Aug 2018 11:47

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Oder eventuell in der 64-Bit Release Konfiguration ausversehen irgendwelche Debug-Features aktiviert oder die Codeoptimierung deaktiviert? Mich macht die derart unterschiedliche Größe des Kompilats stutzig. Etwas größer sind 64-Bit Binaries zwar schon, aber bei weitem nicht in diesem Ausmaß.

EWeiss 24. Aug 2018 16:14

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Ihr habe alle schon das Pic gesehen oder?
Und ja mein Timer läuft mit 0 ms ob es letztendlich auch 0 sind mag dahin gestellt sein.

Zitat:

Er hat ja schon geschrieben, dass es daran liegt. Insofern dürfte das Sleep als Ersatz für eine richtige Frameratenkontrolle zunächst helfen. Sinnvoller ist aber die Framerate direkt zu limitieren.
Ich verstehe euch nicht was soll das helfen wenn ich unter 32Bit 0% Auslastung habe.

Ich soll also den Code optimieren mit Framerate runterfahren usw.. mache meine 32Bit Version dadurch langsamer nur um die 64Bit Version was die CPU Auslastung angeht runterzufahren, ist nicht euer ernst oder?
Zudem hat das Auswirkungen auf alle nachfolgenden Anwendungen die dann diese DLL verwenden.

Zitat:

Ich würde auch vorschlagen in der Timer/Loop die Dir diese Kristalle animiert, einfach mal den Gfx Output auszukommentieren um schon mal zu erfahren ob es daran liegt.
Ich würde vorschlagen ihr überlegt mal was ihr da schreibt.
Ich soll den Code Schrotten damit der 64Bit Compiler (Kompilat am ende die CPU weniger auslastet?)
Nochmal! Wie kann eine Anwendung 64Bit mit gleichen Quell Code kompiliert um ein vielfaches schlechter sein als eine 32Bit Anwendung (Aber hallo in allen belangen)
Zitat:

Das der 64Bit-Compiler noch eine Baustelle ist, sollte allen klar sein.
Ich denke auch das dies das Hauptproblem ist.

Zitat:

Oder eventuell in der 64-Bit Release Konfiguration ausversehen irgendwelche Debug-Features aktiviert oder die Codeoptimierung deaktiviert?
Daran habe ich mich zuerst versucht..
Incl. Debug-Informationen sind natürlich deaktiviert. Davon ab auch mit aktiven Debug Infos ist die EXE bis auf 2>3K genauso groß wobei die Größe im Moment mal nicht mein Problem ist sondern die CPU Auslastung.
Code Optimierung ist an.

Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!
Nur weil ich den Schalter der Plattform umlege von 32 auf 64 und dann Kompiliere.. Schrotte ich mir fast meine CPU? Lustig das ganze.

gruss

Daniel 24. Aug 2018 16:17

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von EWeiss (Beitrag 1411570)
Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!
Nur weil ich den Schalter der Plattform umlege von 32 auf 64 und dann Kompiliere.. Schrotte ich mir fast meine CPU?

Dein Projekt ist offenbar nicht 64bit-kompatibel. Deine Erfahrungen lassen sich - zum Glück - nicht verallgemeinern.
An welcher Stelle exakt sollte der Compiler daran Schuld sein?

Uwe Raabe 24. Aug 2018 16:20

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von EWeiss (Beitrag 1411570)
Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!

Richtig! Alle problemlos laufenden Delphi 64-Bit Anwendungen sind vermutlich eh nur Fake. :roll:

EWeiss 24. Aug 2018 16:27

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von Daniel (Beitrag 1411571)
Zitat:

Zitat von EWeiss (Beitrag 1411570)
Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!
Nur weil ich den Schalter der Plattform umlege von 32 auf 64 und dann Kompiliere.. Schrotte ich mir fast meine CPU?

Dein Projekt ist offenbar nicht 64bit-kompatibel. Deine Erfahrungen lassen sich - zum Glück - nicht verallgemeinern.
An welcher Stelle exakt sollte der Compiler daran Schuld sein?

Ist doch offensichtlich, habe den Part des Quelltextes gepostet.
Genau den gleichen verwende ich unter VS mit GDI+ (gleiche Version) und hier wird meine CPU NICHT ausgelastet.

Ich schicke dir gern den Quelltext kompiliere ihn dann sage du mir das es nicht so ist.
Ich sage es nochmal.. wie kann bei gleicher quellte das Ergebnis schlechter sein als mit 32Bit.
Fühlt euch doch nicht immer direkt auf dem Schlips getreten NUR wenn es um euer geliebtes Delphi geht es ist ein Werkzeug nicht mehr.
Einfach sachlich bleiben hilft unterm strich um einiges mehr.
Zitat:

Richtig! Alle problemlos laufenden Delphi 64-Bit Anwendungen sind vermutlich eh nur Fake.
Ja zu dem Schluss komme ich leider. Sachlich bleiben hilft mir unter umständen mehr.

gruss

Daniel 24. Aug 2018 16:29

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Emil - man spricht nicht umsonst davon, seinen Quellcode auf 64bit zu portieren. Das kann schon sein, dass ein reiner 32bit-Code ein paar Anpassungen für eine 64bit-Umgebung erfordert. Wenn Du Dich mal umschaust, wirst Du feststellen, dass z.B. C-Entwickler mit dem Visual Studio exakt dieselben Themen diskutieren, wenn sie ihre Anwendungen portieren.

EWeiss 24. Aug 2018 16:31

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Email - man spricht nicht umsonst davon,
Wäre es dir möglich mich nicht zu veralbern und deinem Mitgliedern hier etwas mehr Respekt entgegen kommen zu lassen?
Auch wenn du hier der Boss bist. Ich bin nicht dein Lakai.

DANKE!

gruss

Daniel 24. Aug 2018 16:33

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Du hast doch angefangen mit der Aussage, dass der 64bit-Compiler nichts taugt. :mrgreen:

Aber was für Datentypen nutzt Du denn? Kann es sein, dass Dein Code Zeit verliert, wenn er zwischen einfacher und doppelter Genauigkeit umrechnet?
http://docwiki.embarcadero.com/RADSt...elphi_für_x64)

//edit und nein, mein Lakai bist Du nicht - es ist Dein Problem, welches wir hier zu lösen versuchen, nicht meines.

KodeZwerg 24. Aug 2018 16:33

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Delphi 64bit kann schneller Logaríthmische Operationen durchführen als es ein 32bit kann.
Das Problem sollte nicht der Code sein sondern wie Du ihn verwendest.

EWeiss 24. Aug 2018 16:35

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von Daniel (Beitrag 1411577)
Du hast doch angefangen mit der Aussage, dass der 64bit-Compiler nichts taugt. :mrgreen:

Aber was für Datentypen nutzt Du denn? Kann es sein, dass Dein Code Zeit verliert, wenn er zwischen einfacher und doppelter Genauigkeit umrechnet?
http://docwiki.embarcadero.com/RADSt...elphi_für_x64)

//edit un nein, mein Lakai bist Du nicht - es ist Dein Problem, welches wir hier zu lösen versuchen, nicht meines.

Ach so und wo habe ich dich persönlich dumm angemacht?

gruss

Uwe Raabe 24. Aug 2018 16:36

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von EWeiss (Beitrag 1411574)
Sachlich bleiben hilft mir unter umständen mehr.

Zitat:

Zitat von EWeiss (Beitrag 1411570)
Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!

:gruebel:

...und tschüss...

EWeiss 24. Aug 2018 16:37

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1411580)
Zitat:

Zitat von EWeiss (Beitrag 1411574)
Sachlich bleiben hilft mir unter umständen mehr.

Zitat:

Zitat von EWeiss (Beitrag 1411570)
Ich glaube es ist zwecklos mit Delphi 64Bit Anwendungen zu entwickeln!

:gruebel:

...und tschüss...

Dito.. kann man schließen den Thread.
Danke.

gruss

Daniel 24. Aug 2018 16:37

AW: Hohe CPU auslastung bei 64Bit Anwendung
 
Ach Emil.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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