AGB  ·  Datenschutz  ·  Impressum  







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

GDI Handles einer Anwendung

Ein Thema von Alex_ITA01 · begonnen am 25. Aug 2015 · letzter Beitrag vom 2. Sep 2015
Antwort Antwort
Seite 1 von 3  1 23      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

GDI Handles einer Anwendung

  Alt 25. Aug 2015, 14:44
Hallo zusammen,
ich weiß, wie man die Anzahl der GDI Handles einer Anwendung auslesen kann.
Ich habe allerdings folgende Frage.

Ich benutze dieses Tool zum auslesen und Anzeigen der GDI Handles:
http://www.nirsoft.net/utils/gdi_handles.html

Da gibt es eine Spalte, "GDI Total" und "alle GDIs".
GDI Total ist die Aufsummierung der Spalten vorher (Bitmap, Pen usw).
In der Hilfe steht folgender Abschnitt zu den beiden Spalten:

The 'GDI Total' column (a new column added on v1.05) displays the total number of all GDI handles found in the GDI table for the specified process. This means that 'GDI Total' column display the sum of the following columns: Pen, ExtPen, Brush, Bitmap, Font, Palette, Region, DC, Metafile DC, Enhanced Metafile DC, and Other GDI.
The 'All GDI' value is taken from Windows API call (GetGuiResources), and it usually contains a value larger than 'GDI Total', probably because it also counts some internal kernel GDI objects that are not included in the GDI objects table of the process.

Jetzt meine Frage:
Wenn ich mir zum Beispiel bei dem Programm "VMWare Player" die Spalten angucke (ohne das eine VM gestartet ist), dann steht bei "GDI Total = 61" und bei "alle GDIs = 319".

Entsprechend der Hilfe sind die 61 GDI Handles in der GDI Objekt Tabelle registriert. Die anderen 258 (319-61) sind ja nicht registriert, benutzen aber ein GDI Handle.
Wie bekomme ich heraus, wer diese Ressourcen anfordert bzw wie bekomme ich nähere Informationen zu diesen "anderen" Handles heraus?
Das mit VMWare ist nur ein Beispiel. Es geht natürlich darum, eine eigene Anwendung genauer zu beleuchten aber die Zahlen stimmen zumindest und ich würde gerne wissen, wie sich diese Differenz ergibt.

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: GDI Handles einer Anwendung

  Alt 26. Aug 2015, 07:58
Ich nochmal

Ich wollte das Problem mal noch ein bisschen mit Zahlen vertiefen.
Meine Anwendung benötigt laut TaskManager (entspricht bei dem oben genannten Programm der Spalte "Alle GDIs") 7440 GDI Objekte.
Das oben genannte Programm sagt mir in der Spalte "GDI Total" ein Wert von 6083. Das liegt daran, weil da ohne Ende Bitmaps drinne sind. Das weiß ich also woher der Wert kommt. Ob das nun sinnvoll ist oder nicht, spielt hier keine Rolle. Ich möchte nur gerne wissen, was für GDI Objekte noch reserviert werden, da ja anscheind in der GDI Handle Table nur die 6083 registriert wurden aber insgesamt die Anwendung 7440 verbraucht.
Vielleicht könnt ihr da weiterhelfen.

Viele Grüße

Edit:

Oder um es ganz einfach zu beschreiben.

1)
Neues Projekt -> Leere Form, Anwendung starten
GDI Total = 16
Alle GDIs = 39 <- das zeigt auch der TaskManager an

2)
Neues Projekt -> Form mit einem Label und einem Button (keine Eigenschaften der Komponenten geändert), Anwendung starten
GDI Total = 23
Alle GDIs = 44 <- das zeigt auch der TaskManager an

Warum diese Differenz also?
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (26. Aug 2015 um 08:09 Uhr) Grund: Beispiel erweitert
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: GDI Handles einer Anwendung

  Alt 26. Aug 2015, 18:42
Also wirklich konkretes kann ich dir dazu auch nicht sagen, aber wenn ich mir die Funktion im MSDN ansehe könnte man auch auf die Idee kommen, dass der höhere Wert einfach nur der Peak-Wert ist...
Whookie

Software isn't released ... it is allowed to escape!

Geändert von Whookie (27. Aug 2015 um 08:14 Uhr)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: GDI Handles einer Anwendung

  Alt 27. Aug 2015, 08:03
Hallo,
der Peak-Wert wird es nicht sein, da ich bei einem Test festgestellt habe, die Anwendung bei 10000 GDI Handles (Anzeige TaskManager) auch wirklich die Grätsche macht. Das ist auch ein Wert, der entsprechend in der Registry hinterlegt ist aber bis Windows 8 konnte man den Wert in der Registry erhöhen und schon war es kein Problem mehr, mehr als 10000 GDI Handles zu haben. Unter Windows 10 gibt es zwar den Schlüssel in der Registry noch, man kann ihn auch verstellen, aber trotzdem ist bei 10000 Handles Schluss. Keine Ahnung warum der Registry Schlüssel keine Auswirkung mehr hat. Ich möchte ja nur gerne wissen, wer denn so viele Handles belegt/benutzt. Ich habe es absichtlich in meiner Anwendung nicht gemacht

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: GDI Handles einer Anwendung

  Alt 28. Aug 2015, 07:14
push

Hat keiner eine Idee?

Mich wundert auch, dass die entsprechenden Registry Schlüssel alle im Win10 noch da sind aber anscheind keine Auswirkungen haben.

Ich bin ja nicht der einzige, der das Problem hat.
Siehe hier:

http://exception198.blogspot.de/2015...-limit-in.html

https://social.msdn.microsoft.com/Fo...scompatibility

http://stackoverflow.com/questions/3...-in-windows-10
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: GDI Handles einer Anwendung

  Alt 31. Aug 2015, 20:59
push
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: GDI Handles einer Anwendung

  Alt 31. Aug 2015, 22:54
Es gibt auch nicht sichtbare GDI Objekte. Unter "All GDI objects" fallen eventuell auch die nicht sichtbaren, wie Bitmaps, Fonts und DCs usw.

https://msdn.microsoft.com/de-de/lib...=vs.85%29.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: GDI Handles einer Anwendung

  Alt 1. Sep 2015, 06:24
Leider sind die nicht sichtbaren in der GDI Handle Table registriert und somit auch in der Spalte "GDI Total" enthalten. Der größere Wert steht aber in "Alle GDIs" und das ist auch der Wert, den der TaskManager anzeigt.

Wie macht ihr das denn mit euren Anwendungen?
Wenn ich ein neues Projekt erstelle mit einer Form, mit einem Label und einem Button (keine Eigenschaften der Komponenten geändert) und ich schon 44 GDI Handles belege, dann komme ich bei 10000 GDI Handles auf maximal 227,xxx Forms, die maximal diese beiden Komponenten haben dürfen. Das eine Form nur diese beiden Komponenten beinhaltet, glaube ich allerdings nicht. Deswegen fällt die Anzahl der möglichen Forms auch mit dem Anstieg der Komponentenanzahl.
Was verbrauchen eure "größeren" Anwendungen denn?

Ob es sich lohnt, dass mal in der Quality Central zu beschreiben?

Viele Grüße
Miniaturansicht angehängter Grafiken
2015.09.01-07_20_01-001.jpg  
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: GDI Handles einer Anwendung

  Alt 1. Sep 2015, 08:47
Ob es sich lohnt, dass mal in der Quality Central zu beschreiben?
Nein, wozu?
An die Grenze von 10000 stößt man eigentlich nur wenn man etwas "falsch" macht.
Vielleicht ist dein Ansatz einfach verkehrt?

Formuliere mal dein konkretes Problem!

Denn was bringt es, ins QC zu schreiben, dass Windows eine Grenze von 10000 GDI-Handles hat und die das bei Emba bitteschön fixen sollen?

Selbst deine IDE verbraucht relativ wenig und dabei ist das eine große und umfangreiche Software (bspw. XE8 - GDI Total: 1982; All GDI: 2830).
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: GDI Handles einer Anwendung

  Alt 1. Sep 2015, 09:03
Ich hab hier mal eine App mit knapp 100 Forms - die eine Art Bildbearbeitung erlaubt - und die Spitzenwerte im GDIView sind 460/650 (bei intensivem Arbeiten) also weit ab von jeglichen Problemen.
Auch das Öffnen und Bearbeiten von ettlichen (10) Grafikdateien mit gemeinsam gut 300 Layern verbraucht gerade mal 350/420 Handles (alle Ebenen sichtbar + Kopien in neuen Bildern).

Grundsätzlich stellt sich also die Frage ob ein so hoher Wert nicht einfach ein Designproblem ist?

Was Delphiprogramme anbelangt mache ich mir da jedenfalls keine Sorgen.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:32 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