Laden...

Wie finde ich heraus welcher Prozess meine GUI blockiert?

Erstellt von AULA vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.642 Views
A
AULA Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren
Wie finde ich heraus welcher Prozess meine GUI blockiert?

Hallo,

ich programmiere als Werksstudent für eine kleine Firma eine Auftragsübersicht mit Datenanbindung zu einer Access-Datenbank. Das Programm läuft auch soweit, nun wurde festgestellt, dass die GUI manchmal blockiert wird, als manchmal lange braucht bis eine Aktion ausgeführt wird.
Ich habe dazu schon diesen ([FAQ] Warum blockiert mein GUI?) Thread gelesen, jedoch ist mir nicht bewusst, welcher Prozess meine GUI blockiert. Das ganze dreht sich an guten Rechnern um ca. 0.2-0-5s, an schlechten bis zu 2s.

Ich rufe per DoppelClick in der DataGridView ein neues Fenster auf, welches dann oft sehr lange braucht zum öffnen. Ich vermutete zuerst die Datenanbindung würde sehr lange dauern, doch durch setzen einiger Haltepunkte, habe ich gemerkt, dass das Abarbeiten des DoppelClick Events an sich, nicht sehr lange dauert, sodern bis dieses gestartet wird.

Zu mir:
Ich habe mein Wissen zu dem Ganzen "zusammengegoogelt", also bin ich kein Fachmann.

Ich wollte nun so vorgehen:
Den großen Prozess identifizieren und dann in einem anderen Thread auslagern, ist das soweit richtig?
Gibt es im Debugger eine Funktion wie z.B.: "Stopp bei Prozess > 50ms"?

Vielen Dank im Vorraus!

P
1.090 Beiträge seit 2011
vor 6 Jahren

Den Performance Problem kannst du mit dem Leistungsprofiler auf die schliche kommen.

Und ja wenn der Prozess zu langsam ist und die UI blockiert, solltest du ihn in einem Thread bzw Task auslagern.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

D
985 Beiträge seit 2014
vor 6 Jahren

Ein Doppel-Klick-Ereignis tritt ein, wenn zwei einfache Klicks innerhalb einer bestimmten Zeitspanne innerhalb einer bestimmten Entfernung (kann der Benutzer jeweils selber anpassen) erfolgen.

Der erste einfache Klick - der dann gleich zum Doppel-Klick werden soll - wird auch als einfacher Klick verarbeitet.

Es gibt also kein Doppel-Klick-Ereignis ohne das Klick-Ereignis.

Meine Vermutung:

Es hängt bei der Verarbeitung des normalen Klick-Ereignis.

A
AULA Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Vielen Dank für die schnellen hilfreichen Antworten, ich werde das gleich morgen überprüfen und berichten!:)
Gruß

3.003 Beiträge seit 2006
vor 6 Jahren

Wenn's deutlich stockt - man kann auch jederzeit des debugging pausieren und sieht dann, wo in der Ausführung er sich grad befindet. Hilft manchmal.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

A
AULA Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Problem ist, dass die Anwendung auf mehreren Rechnern läuft und das geschilderte auf den verschiedenen Rechnern, je nach Leistung, mehr oder wenig ausgeprägt ist.
Am CellClick Event hängt es nicht.

Ich habe nun an einem der langsameren Rechner festgestellt, dass das Problem vor allem auftritt, umso öfter die Form geöffnet wurde. Die Formen sind Bearbeitungsfenster für ein DataGridView. Die Anwendung soll den ganzen Tag offen bleiben, da kann es schon einmal vorkommen, dass man das Fenster am Tag 30-mal öffnet. Am Anfang flüssig, dann immer langsamer.
Gibt es Varibablen oder ähnliches die wieder freigegeben werden müssen?

16.806 Beiträge seit 2008
vor 6 Jahren

Variablen nicht; aber es gibt Typen, die freigegeben werden müssen, zB. Streams.
Wir sehen hier aber nicht, was Du hast.

So wird es das beste sein, wenn Du jemanden, der sich auskennt, Deinen Code reviewt.
Aufgrund der potentiellen Menge wird das für das Forum zu viel sein und Du wirst womöglich kein Interesse haben Dein gesamtes Projekt hier hoch zu laden.

3.003 Beiträge seit 2006
vor 6 Jahren

https://www.jetbrains.com/dotmemory/download/
https://www.jetbrains.com/profiler/download/

Free trial (5 Tage). Zeigt dir auch die üblichen Verdächtigen für Speicherlecks (dotMemory) und degrading performance (dotTrace) an. Ist ein bisschen Einarbeitung, wenn man noch gar nicht mit Profilern gearbeitet hat.

S.a. den Link von Palin.

LaTino
(btw, die Vollversion von Resharper enthält die beiden Tools schon, und die Lizenz ist auch für eine kleine Firma nicht vergeudet. Aber ich klinge schon wie 'ne Werbung.)

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

A
AULA Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Nein, ich denke Code hochladen wird nichts bringen.
Aber ich werde den Hinweisen nachgehen, der Leistungsprofiler hat mir schon einiges gebracht.
In die Artikel werde ich mich dann bei Gelegenheit einarbeiten.

Vielen Dank an alle für die Hilfe!