AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Hohe CPU Auslastung bei 64Bit Anwendungen
Thema durchsuchen
Ansicht
Themen-Optionen

Hohe CPU Auslastung bei 64Bit Anwendungen

Ein Thema von EWeiss · begonnen am 27. Aug 2018 · letzter Beitrag vom 30. Aug 2018
 
EWeiss
(Gast)

n/a Beiträge
 
#1

Hohe CPU Auslastung bei 64Bit Anwendungen

  Alt 27. Aug 2018, 17:01
Ich versuche es noch einmal ohne über den Compiler zu schimpfen.
Die Ausgangssituation ist diese das die gleiche Anwendung gleicher Quelltext unter 32Bit 0% und mit 64Bit 25% Cpu Auslastung produziert.
Bei 32Bit könnt ihr die Geschwindigkeit auf Maximum stellen und es bleibt bei fast 0% Auslastung wenn die Durchsichtigkeit ausgeschaltet ist.

Was ich versucht habe.
Zitat:
Dort habe ich jetzt schon versucht MMTimer (Hochauflösender Timer vom MMSystem inkl. QueryPerformanceFrequency Callback usw.
Ein Sleep(0) oder Sleep(1) bringt auch nichts.
Den Timer auf 25ms zu setzen bremst das gesamte zeichnen aus.
Mein Problem ist zu ergründen warum das so ist.
Die Anwendung zum testen das es so ist kann man sich hier anschauen.

Es tritt nur dann auf wenn diese Funktion aufgerufen wird.

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;
Das kann man leicht testen indem man einfach die "eigene Rotation und die 3D tiefe ausschaltet" beide Eigenschaften verwenden im etwas abgeänderte form die gleiche Funktion.

Meine Vermutung ist das dieses Problem von der GDIPlus 64Bit selbst verursacht wird oder aber wie zuvor schon öfters eine der Typen nicht korrekt für 64Bit definiert ist.

Vielleicht hat ja doch noch jemand eine Idee falls es an der Anwendung selbst liegt.
Bei der DLL werde ich es dann wohl selbst finden müssen obwohl ich nicht erkennen kann das es hier ein Type Problem geben könnte. (Etwas fehlt mir auch die Erfahrung )

Hier noch dir Funktionen
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;
Die übergebenen Typen sind alle identisch..
Habe es auch schon mit Pointer versucht bringt keine Verbesserung.

gruss

Geändert von EWeiss (27. Aug 2018 um 17:27 Uhr)
  Mit Zitat antworten Zitat
 


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 00:03 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