none
Wie kann es sein, dass meine WPF-Anwendung unter dem .NET-Framework 3.5 (viel) flüssiger läuft, als auf dem .NET-Framework 4.0 oder 4.5? RRS feed

  • Frage

  • Also ich habe eine WPF-Anwendung geschrieben, ursprünglich im .NET-Framework 4.5. Da lief das Programm recht langsam. 

    Als ich dann unter Projekteigenschaften die Zielplattform ins .NET-Framework 3.5 geändert habe, und das Programm wieder gestartet habe, wurde es plötzlich viel flüssiger ausgeführt (der Code etc. ist immernoch derselbe).

    Woran kann das liegen? Und kann man am Framework 4.5 irgendwie anpassen, damit das nicht mehr so langsam läuft, sondern genauso wie unter 3.5?

    Beste Grüße und Danke im Voraus

    Montag, 3. Juni 2013 11:00

Alle Antworten

  • Hallo, eigentlich ist das Verhalten nicht normal. Ich denke mal das eine bestimmte Klasse da etwas langsamer arbeitet. Warum das so sein sollte weis ich aber auch nicht. Meine einzige Idee wäre in einem neuen Projekt mal die groben Funktionalitäten durch zu testen.

    Es könnte natürlich auch sein das irgendeine Standarteigenschaft in .NET 4.0 geändert wurde, wodurch sich die ausführungsgeschwinigkeit änderte.

    Hast du es denn beide male im Release-Modus gewtestet? Im Debug-Modus ist automatisch alles etwas langsamer.

    PS: auf welchem Betriebssystem hast du es denn getestet?


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.


    Montag, 3. Juni 2013 13:53
    Moderator
  • Hallo N.H.7,

    Als ich dann unter Projekteigenschaften die Zielplattform ins .NET-Framework 3.5 geändert habe, und das Programm wieder gestartet habe, wurde es plötzlich viel flüssiger ausgeführt [...] Woran kann das liegen?

    Das .NET Framework 4.5 bringt eigentlich viele Performanzverbesserungen mit sich. Auch was WPF angeht. Deine Behauptung kommt für mich deshalb etwas überraschend.

    Verwende bitte einen Profiler um das Laufzeitverhalten deiner WPF-Anwendung auf deinem System zu untersuchen. Mache zwei Snapshots, einmal unter .NET 3.5 und einmal unter 4.5. Wähle die Problemstellen aus (wo sich die Performanz dramatisch unterscheidet) und poste deine Ergebnisse hier. Ich bin gespannt, was wir dann herausfinden.

    P.S. Hast Du dein .NET 4.5 auf die letzte Version aktualisiert?

    WPF Performance Suite
    Optimieren der WPF-Anwendungsleistung

    (Sollten wir diesen Thread nicht eher ins WPF-Forum verschieben?)

    Gruß
    Marcel


    • Bearbeitet Marcel Roma Montag, 3. Juni 2013 15:04 Link hinzugefügt
    Montag, 3. Juni 2013 14:49
  • Hallo Koopakiller,

    ja ich hab es auch im Release-Modus beide Male getestet. Kam das gleiche Ergebnis raus.

    Hab mittlerweile etwas herausgefunden. Ich hatte ja einen Button mit einem Bild darin, beim Click sollte (solang die Maustaste unten ist), das invertierte Bild angezeigt werden, beim loslassen wieder das normale Bild. Und das hat irgendwie diese (extreme) Verzögerung bewirkt... hab diesen Effekt einfach geändert. (Komischerweise funktioniert aber dieses "Bildrein-" und "Bildrausladen" unter .NET 3.5 schneller als unter 4.0 oder 4.5. ..wollte mich aber nicht länger damit beschäftigen, ist nicht weiter erheblich, dass es nur mit dem Invertieren des Bilds funktionieren soll)

    Danke jedenfalls für deine Antwort

    Dienstag, 4. Juni 2013 19:51
  • Hallo Marcel Roma,

    ich hab das auch mit der WPF Performance Suite versucht usw. aber es kam eine Fehlermeldung die was mit einem IPC-Port (oder so ähnlich) zu tun hatte.. Aber parallel dazu habe ich folgendes bemerkt:

    Ich hatte ja einen Button mit einem Bild darin, beim Click sollte (solang die Maustaste unten ist), das invertierte Bild angezeigt werden, beim loslassen wieder das normale Bild. Und das hat irgendwie diese (extreme) Verzögerung bewirkt... hab diesen Effekt einfach geändert. (Komischerweise funktioniert aber dieses "Bildrein-" und "Bildrausladen" unter .NET 3.5 schneller als unter 4.0 oder 4.5. ..wollte mich aber nicht länger damit beschäftigen, ist nicht weiter erheblich, dass der Button-Effekt nur mit dem Invertieren des Bilds funktionieren soll)

    Danke jedenfalls für deine Antwort

    Dienstag, 4. Juni 2013 19:54
  • Hallo N.H.7,

    schön, dass Du die Quelle für das seltsame Performanzverhalten entdeckt hast! Es wäre - glaube ich - für uns alle hilf- und lehrreich, wenn Du uns ein Code-Snippet zur Verfügung stellen könntest, das die Verzögerung reproduziert. Das würde anderen Mitgliedern unserer Community helfen, die sich mit dem selben Problem konfrontiert sehen. Danke.

    Gruß
    Marcel

    Mittwoch, 5. Juni 2013 07:04
  • Hallo Marcel Roma,

    also ganz bewiesen ist es ja nicht, dass es wirklich daran liegt. Ich meine an der Stelle werden einfach nur diese Standardanweisungen

    ImageBrush br = new ImageBrush();
    
    BitmapImage image = new BitmapImage(new Uri(uri), UriKind.Relative)); // uri weiter oben deklariert
    br.ImageSource = image;
    button.Background = br;   // button weiter oben deklariert

    Aber mittlerweile denke ich, dass die Verzögerung auf etwas anderes zurückzuführen sein könnte.

    Ich hab bei der Initialisierung des Programms zwei Bäume erstellt, welche anscheinend ziemlich speicherlastig sind. Bei der Verwendung bestimmter Tasten gibt es keine Verzögerung bei der Ausführung. Wird dann aber eine bestimmte Taste gedrückt, wodurch ein Bildwechsel erfolgt, dauert es ca. 20 Sekunden bis alles angezeigt ist. Wenn ich diese Bäume weglasse bei der Initialisierung, dauert dieser Bildwechsel garnicht.

    Ergibt das irgendeinen Sinn? Ich meine, wenn die Variablen ja schon existieren und später verwendet werden sollen, wieso sollten die eine Verzögerung bewirken, obwohl sie mit dem Bildwechsel direkt nichts zu tun haben?

    Beste Grüße

    Neritan

    Samstag, 8. Juni 2013 13:58