Benutzer- und GDI-Objekte

Einer steigenden Komplexität von Applikationen steht oft eine Zunahme von Objekten in der Benutzeroberfläche gegenüber. Jedes in CONZEPT 16 erzeugte Oberflächen-Objekt hat einen unmittelbaren Einfluss auf die Ressourcen von Windows.


So wie CONZEPT 16 dem Entwickler ein Handle auf die Steuerelemente zur Verfügung stellt, um mit den Objekten arbeiten zu können, existiert analog dazu ein entsprechender Handle (HWND) unter Windows. Für jedes Windows-Handle wird ein sogenanntes Benutzer-Objekt erzeugt. Bei der Verwendung von Grafikobjekten (wie Fonts oder Bitmaps) allokiert eine Applikation unter Windows GDI-Objekte.

Die Anzahl der Objekte, die eine Applikation verwenden kann, ist eine fest vorgegebene Größe und damit unabhängig des verfügbaren Hauptspeichers. Jeder Prozess unter Windows kann maximal 10.000 Benutzer- und 10.000 GDI-Objekte allokieren. Das hört sich auf den ersten Blick ausreichend an, kann aber in der Praxis durchaus erreicht werden. Bei Anwendungen, die dem Benutzer zum Beispiel über viele Notizbuchseiten Informationen zur Verfügung stellen, kann die Anzahl der Objekte eines Fensters unter Umständen zwei bis dreitausend betragen. Bei mehreren gleichzeitig geöffneten Frames wird dann das Limit unvermeidlich erreicht.

Was passiert, wenn die maximale Anzahl erreicht wurde?

Bei Erreichen des maximalen Anzahl der Handles gibt Windows selbst keine Meldung aus. In den betroffenen Anwendungen kommt es allerdings zu Darstellungsfehlern. So kann es schon mal sein ein, dass ein Menü komplett fehlt. Damit es in CONZEPT 16 dazu nicht kommt, findet seit der Client-Version 5.3.09 vor dem Laden eines Fensters eine Überprüfung der Windows-Ressourcen statt. Stehen weniger als 10% der Benutzer-Objekte zur Verfügung, wird das Fenster nicht geladen und die entsprechende Funktion (WinOpen(), WinDialog() und WinAddByName()) gibt den Fehlercode _ErrOutOfMemory zurück.

Wie kann ich ermitteln, wie viele Ressourcen meine Anwendung aktuell verwendet?

  • Unter WindowsÜber den Task-Manager lässt sich der Verbrauch an Benutzer- und GDI-Objeken ermitteln. Standardmäßig werden die Spalten nicht angezeigt und müssen nachträglich auf sichtbar gestellt werden.
Task-Manager
  • In CONZEPT 16Auf der Seite “System” des “Info-Dialogs” lässt sich der Verbrauch an Benutzer- und GDI-Objekten ablesen. Dieser Dialog lässt sich über die Funktion WinOpen(_WinC16Info) auch in die eigene Anwendung integrieren.
Info-Dialog

Welche Möglichkeiten stehen mir als Entwickler zur Verfügung?

Für die Objekte innerhalb eines Notizbuches stellt CONZEPT 16 eine Optimierungsmöglichkeit zur Verfügung. Bei der Eigenschaft wpFlags des Application-Objekts (_App) kann die Option _WinAppNotebookPageDelayed gesetzt werden. In diesem Fall werden für die Objekte einer Notizbuchseite erst dann die Windows-Handles erzeugt, wenn die Seite das erste Mal sichtbar wird.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

6 Antworten

  1. nach meinem Test offensichtlich der C16-Prozess auf dem Terminalserver, wärend der Client-Prozess wohl nur als Anzeige dient und die C16-Objekte nicht kennt.

  2. @Th.Eichele
    Dazu muss die Summe der Objekte eines Frames mit Hilfe der Funktion WinInfo() ermittelt werden. Die Anzahl der Objekte entspricht ungefähr der Anzahl der GDI-Objekte.

  3. Gibt es eine Möglichkeit alle Frames aufzuspüren, die z.B. mehr als 1000 Objekte verbrauchen würden, um bei deren Aufruf bevorzugt diesen Fehler abzufangen ?

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner