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
Applikation / GUI ist unter .NET Framework 4.7 sehr langsam
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 451

Themenstarter:

Applikation / GUI ist unter .NET Framework 4.7 sehr langsam

beantworten | zitieren | melden

Hallo,
ich arbeite an einer .NET Applikation bestehend aus mehreren Projekten. Ich programmiere unter Visual Studio 2015, C# und habe bisher die Zielplattform .NET Framework 4.5 verwendet. Das Programmpaket wird hundertfach verwendet und arbeitete bisher problemlos.

Vor kurzem wurde mir berichtet, dass eine der Applikationen in einem spezielle Programm-Modus ein auffallend langsames Startverhalten an den Tag legt. Ich habe das Verhalten reproduzieren können. Der Aufbau der GUI erfolgt sehr schleppend. Eine Detailanalyse ergab, dass offensichtlich sämtliche Zugriffe auf GUI-Elemente sehr viel Zeit verbrauchen. Beispielsweise dauert das Beschreiben des Textes eines Context-Menüs statt unter 1 ms nun 80 ms. Das passiert an vielen Stellen, summiert sich auf und ergibt schlussendlich das beobachtete langsame Verhalten.

Weitere Untersuchungen ergaben, dass das Verhalten erst dann auftritt, wenn auf dem Ziel-Computer das .NET Framework 4.7 installiert ist. Mittels Installation/Deinstallation dieser Frameworkversion konnte ich das Verhalten an- und abschalten.

Als Lösungsversuch habe ich nun das .NET Framework 4.7 Developer Pack heruntergeladen und installiert, das Zielframework in allen Projekten auf 4.7 heraufgesetzt und alle Assemblies neu generiert. Leider löst das mein Problem nicht, das langsame Startverhalten ist unverändert.

Jetzt suche ich nach weiteren Ansätzen zur Problemlösung und hoffe, hier entsprechende Anregungen zu finden.

Danke
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Forms oder WPF ?

Bei Forms hat es einige Änderungen gegeben: High Dpi Support in Windows Forms

Vielleicht liegt hier der Hund begraben.

Bei WPF gab es auch Änderungen, wenn auch nicht so Signifikant. Versuche mal EnableMultiMonitorDisplayClipping explizit an oder auszuschalten.
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 451

Themenstarter:

beantworten | zitieren | melden

Hallo und vielen Dank.
Ich arbeite mit Forms.
Ich werde mich mit dem angegebenen Link befassen, vielleicht werde ich fündig.

Danke und viele Grüße
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 878
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

Ich würde zuerst das Ausschalten von HighDPI probieren.
<System.Windows.Forms.ApplicationConfigurationSection>
  <add key="DpiAwareness" value="PerMonitorV2" />
  <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" /> 
</System.Windows.Forms.ApplicationConfigurationSection> 
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 451

Themenstarter:

beantworten | zitieren | melden

Hallo,
ich bin dem Link gefolgt und habe die empfohlenen Einstellungen (inkl. EnableWindowsFormsHighDpiAutoResizing) übernommen, aber das ändert leider nichts am Verhalten.

Danke
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1899
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Die Frage ist, in welchem speziellen Programm Modus das problem auftritt.
Auch wäre zu klären wie das Programm aktuell arbeitet.
Sind die Controls fest in der GUI umgesetzt oder werden diese ggf. dynamisch generiert?
Ohne Background zu der Umsetzung kann nur geraten werden.
Es wäre auch ein sehr seltsames Verhalten, wenn ein .Net Update das Problem auslösen würde.
Entsprechend bin ich deshalb auch etwas skeptisch, da die DPI Einstellungen scheinbar nicht das Problem sind.
Hätte mich aber auch gewundert, da die DPI Einstellung nur ein Problem bei der Anzeige und nicht bei der Performance löst.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 451

Themenstarter:

beantworten | zitieren | melden

Hallo und vielen Dank.

Das Programm arbeitet im Normalfall asynchron, indem es über diverse Schnittstellen mit externen Geräten kommuniziert, d.h. Messages an diese sendet und per Eventhandler die Antworten verarbeitet. In diesem Modus arbeitet das Programm fehlerfrei. Der spezielle Modus, in dem der Performanceverlust auftritt, ist der, in dem das Programm offline (und daher eher synchron) arbeitet.

Und ja, das .NET-Update löst definitiv das Verhalten aus. Das ist an mehreren Computern unter verschiedenen Betriebssystemen (Windows 7, 8.1, 10) nachweisbar und reproduzierbar. Das Problem tritt erstmalig mit der Installation des Frameworks .NET 4.7 auf und ist nach dessen Deinstallation sofort wieder verschwunden.

Die Controls werden teilweise dynamisch angelegt und konfiguriert. Ich konnte Verzögerungen in diesen Konfigurationsroutinen beobachten (siehe Ausgangspost).

Ich konnte mir auch nicht vorstellen, dass die DPI-Einstellungen das Problem verursachen, bin aber trotzdem dem Rat gefolgt und habe es probiert.

Gruß
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

Schau mal ob du mit eine Profiler die genaue Stelle bestimmen kannst. Dann kann man vielleicht was anhand des Funktion sagen die Dort aufgerufen wird.

Ansonsten kann man auch noch ein neues WPF Projekt anlegen und Probieren dort den Fehler nachzustellen.
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1899
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Da du als Zielplatform .Net 4.5 verwendest, kann das Update auf 4.7 eigentlich nichts damit zu tun haben bzw. würde dies auffallen auch in anderen Fällen.
Wie sieht den die App.config aus.
Vielleicht hast du dort eine Einstellung, die sich mit .Net 4.7 beisst.

Wenn deine Event Verarbeitung auch sauber ist, dann könnte ich mir nur noch krumme Einstellungen in der Config vorstellen.
Auch wenn dies nicht sein dürfte, da i.d.R. dort auch entsprechend fest die .Net Version drin stehen sollte.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

Was Du versuchen kannst ist ngen update auszuführen. Das dauert dann auch mal gut ne Stunde.

Gerade in Unternehmen wird das manchmal durch die IT geblockt und der .NET Native Optimizer läuft nicht (vollständig) durch.
Das ist dann aber ein Problem eurer IT, nicht von .NET.

Wenn Du 100% sicher bist, dass es an .NET 4.7 liegt und alles andere ausschließen kannst, dann mach nen Issue bei Microsoft auf.
https://github.com/Microsoft/dotnet/issues
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers