Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie finde ich heraus welcher Prozess meine GUI blockiert?
AULA
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Wie finde ich heraus welcher Prozess meine GUI blockiert?

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1.090

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
AULA
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die schnellen hilfreichen Antworten, ich werde das gleich morgen überprüfen und berichten!:)
Gruß
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3.003
Herkunft: Thüringen

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
AULA
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.510

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3.003
Herkunft: Thüringen

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
AULA
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers