Laden...

Applikation / GUI ist unter .NET Framework 4.7 sehr langsam

Erstellt von Christel vor 6 Jahren Letzter Beitrag vor 6 Jahren 4.780 Views
C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 6 Jahren
Applikation / GUI ist unter .NET Framework 4.7 sehr langsam

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.

849 Beiträge seit 2006
vor 6 Jahren

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.

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 6 Jahren

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.

W
872 Beiträge seit 2005
vor 6 Jahren

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> 
C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 6 Jahren

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.

T
2.223 Beiträge seit 2008
vor 6 Jahren

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.

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 6 Jahren

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.

P
1.090 Beiträge seit 2011
vor 6 Jahren

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

T
2.223 Beiträge seit 2008
vor 6 Jahren

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.

16.830 Beiträge seit 2008
vor 6 Jahren

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