Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

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

Zacherl 30. Aug 2018 12:35

AW: Hohe CPU Auslastung bei 64Bit Anwendungen
 
Zumindest davon ausgehend, dass wirklich die zwei GDIP Aufrufe für die hohe Auslastung sorgen (was ich bei mir nicht 100%ig verifizieren konnte, da das Problem bei mir nicht auftritt), kann es nur noch ein implementationstechnisches Problem der GDI+ Schnittstelle sein. Hier springt der Code ja in die entsprechende Dll, auf die man nun wirklich keinen Einfluss mehr hat.

Meine Vermutung war, dass für die 64-Bit Version eventuell neuere CPU Instructions (AVX, etc.) zur Optimierung verwendet werden und für Systeme ohne diese Instructions lediglich ein primitiver und imperformanter Fallback implementiert wurde. Ist natürlich reine Spekulation, aber scheinbar tritt das Problem ja wirklich nur hardwarespezifisch bei Emil auf dessen CPU beispielsweise tatsächlich kein AVX und co. unterstüzt.

Memnarch 30. Aug 2018 15:19

AW: Hohe CPU Auslastung bei 64Bit Anwendungen
 
GDI+ stammt noch aus XP-Zeiten, die 64Bit Portierung muss also erst viel später gekommen sein. Durchaus möglich, dass da etwas geschlampt wurde. Besonders ärgerlich: Im Gegensatz zu GDI, ist GDI+ auf Win7 nur Softwareseitig implementiert. Das machts natürlich um so ärgerlicher.

EWeiss 30. Aug 2018 17:55

AW: Hohe CPU Auslastung bei 64Bit Anwendungen
 
Zitat:

kann es nur noch ein implementationstechnisches Problem der GDI+ Schnittstelle sein.
Ok.. Ich lade GDI+ dynamisch.
Aber selbst wenn das ein Problem sein sollte was ich bezweifeln möchte müssten die gleichen Probleme dann auch unter 32Bit auftreten.
Denn auch hier wird sie Dynamisch geladen.

Ich habe die Typen Graphics und Image als LONG_PTR definiert weil meine Properties in einem vordefiniert Speicherbereich der Winproc geschrieben und gelesen werden.. siehe

Zitat:

cbWndExtra!
Extra Class Memory Specifies the amount of extra memory, in bytes, that the system should reserve for the class. All windows in the class share the extra memory and can use it for any application-defined purpose. The system initializes this memory to zero.
um sie nachher nicht extra noch einmal konvertieren zu müssen.
Die Größe des Speicherbereich ist dann abhängig von 64 btw. 32Bit. Deshalb *SizeOf(LONG_PTR)
Die Propertys werden dann mit SetWindowLongPtr geschrieben und GetWindowLongPtr gelesen.

Also es ist schon optimiert.
Man kann es drehen wie man will da ist leider nichts zu machen.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Seite 4 von 4   « Erste     234   

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