Laden...

Abfrage der Anzahl der Benutzer Objecte (Win32-GUI-Handles)

Erstellt von Gremgiz vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.034 Views
G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 13 Jahren
Abfrage der Anzahl der Benutzer Objecte (Win32-GUI-Handles)

Hallo,

um ein wenig Sicherheit in mein Programm zu bringen, möchte ich periodisch die Anzahl der Benutzer Objecte abfragen, wie man sie auch im Taskmanager sieht. Wie kann das bewerktsetlligt werden? Über Process.GetCurrentProcess bekomme ich die Info nicht

Gruß
Gremgiz

S
211 Beiträge seit 2010
vor 13 Jahren

Evt so:

System.Diagnostics.Process[] myCurrentProcesses = System.Diagnostics.Process.GetProcessesByName("myName");

Bei "myName" einfach den Namen deines Prozesses einfügen, so wie er auch im Taskmanager angezeigt wird. Bei Excel zBsp "EXCEL".
Dann kriegst du ein Array mit allen diesen Prozessen. Wobei ich mir nicht sicher bin ob das jetzt dass ist was du wolltest.

5.657 Beiträge seit 2006
vor 13 Jahren

Was sind denn "Benutzer Objecte"?

Weeks of programming can save you hours of planning

S
211 Beiträge seit 2010
vor 13 Jahren

Was sind denn "Benutzer Objecte"?

Weiß ich auch nicht, aber da er vom Taskmanager redet hab ich einfach mal auf Prozesse getippt 😉

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 13 Jahren

Benutzer Objecte (engl. User Objects) werden vom Programm erzeugt. Pro Anwendung sind diese auff 10000 limitiert. Da meine Anwendung sehr viele user objects erzeugt will ich einfach sicherstellen, dass die Grenze nicht erreicht wird. Diese kann man sich im Taskmanager unter Prozesse anzeigen lassen (muss manuell hinzugefügt werden - genauso wie die Anzahl der GDI Objects)

5.657 Beiträge seit 2006
vor 13 Jahren

Aber was genau sind denn diese Objekte? Instanzen einer Klasse von dir? Warum ist die Anzahl limitiert? Und warum zählst du sie nicht einfach, wenn sie erstellt werden? Sollen wir alles erraten?

Weeks of programming can save you hours of planning

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 13 Jahren

Das vorgeschlagene habe ich schon probiert. Das gibt mir aber nicht die UserObjects sondern alles mögliche

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 13 Jahren

@Mr. Sparkle: Jedes programmerzeugt die völlig autark. Da kann man nicht eingreifen. Wenn du z.B. eine Textbox erstellst hast du mind. 1 UserObject erzeugt. Das handelt Windows automatisch. Warum die limitiert sind - Gute Frage für Redmond - vermutlich performance und Stabilität.

Wie schon erwähnt, man kann sich die Anzahl im Taskmanager unter Prozesse ansehen, wenn man sich die Spalte reinholt (Ansicht - Spalten wählen)

gruß
Gremgiz

5.657 Beiträge seit 2006
vor 13 Jahren
Hinweis von herbivore vor 13 Jahren

Hier aus Komfortgründen direkt die Kurzfassung der Infos aus dem Link:

GetGuiResources Function
Retrieves the count of handles to graphical user interface (GUI) objects in use by the specified process.

Weeks of programming can save you hours of planning

3.511 Beiträge seit 2005
vor 13 Jahren

Aber was genau sind denn diese Objekte?

Ein User Object ist ein Handle auf ein GDI Objekt. Jede Anwendung hat 65000 Handles zur Verfügung. Von den 65k hat jede Anwendung nur gut - hat Gremgiz ja bereits erwähnt - 10k GDI Handles (wobei diese Anzahl beeinflusst werden kann). Sind diese erschöpft, kommt es zur einer OutOfMemory Exception. Sehr gerne gesehen, wenn man etwas selber zeichnet und nie seine Objekte disposed.

Siehe User Objects (Windows)

Warum die limitiert sind - Gute Frage für Redmond - vermutlich performance und Stabilität.

Das ist eine Altlast, die seit Windows 3.0 mit rumgeschleppt wird...

[Edit]
Dieser Artikel erklärt wie die Dinger funktionieren, und warum es diese überhaupt gibt "Give Me a Handle, and I'll Show You an Object".

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

5.657 Beiträge seit 2006
vor 13 Jahren

Aha, verstehe. Danke für die Aufklärung, Khalid. Jetzt verstehe ich aber immer noch nicht, warum man sie zählen muß. Ich kann mir nicht vorstellen, wie ein Programm sooo viele GDI-Objekte erstellen kann, wenn es ordentlich programmiert ist.

Weeks of programming can save you hours of planning

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 13 Jahren

Vielen Dank dafür-. Das hat genau mein problem gelöst. Warum ich das trotz stundenlanger suche nicht gefunden habe bleibt wohl ein geheimnis

😃

Gruß
Gremgiz