ElementHost-Größe verursacht langsames Öffnen / Laden von wpf mit hoher Speicherbelegung

9

Das Problem:

Wir haben eine Winforms-Anwendung, die ein weiteres WPF-Fenster öffnen kann. Dieses Fenster enthält verschiedene Symbole und Texte und ist nicht übermäßig komplex. Zurück zum Hauptfenster, das WinForms, hat auch ein WPF-Steuerelement, das mit ElementHost (ElementHost wurde speziell entwickelt, um es Winforms zu ermöglichen, ein WPF-Steuerelement zu hosten) eingebettet. Wir haben jedoch festgestellt, dass, wenn die Speicherauslastung dieser Anwendung ziemlich hoch wird, das Öffnen dieses zweiten WPF-Fensters einige Zeit in Anspruch nehmen kann.

Wir haben in VS2012 eine kleine Testanwendung erstellt, die das Problem reproduzieren kann. Die Testanwendung öffnet ein Winforms-Fenster mit zwei Schaltflächen. "Add 4 GB Speicherverbrauch" und "Open WPF-Fenster". Das WPF-Fenster hat ein einzelnes kleines Symbol (48 * 48) und das ist alles. Wenn wir die 4 GB-Speicherbelegung hinzufügen und versuchen, das Fenster zum ersten Mal zu öffnen, dauert es etwa 7 Sekunden, um das Fenster zu öffnen.

CODE: Ich habe die Test-App und den Quellcode über BitBucket öffentlich zugänglich gemacht.

Dinge, die wir herausgefunden haben:

  • Die App läuft definitiv in 64-Bit, da sie OutOfMemoryExceptions in 32-Bit auslöst.
  • Ohne die Speichernutzung wird das Fenster sofort geöffnet.
  • Bei der Speichernutzung ist das Fenster nur langsam, wenn es das erste Mal geöffnet wird.
  • Wenn das WPF-Fenster kein Bild enthält, wird es sofort geöffnet.
  • Wenn Sie die Größe des Elementhosts im winforms-Steuerelement auf 1 * 1 reduzieren, wird das Fenster sofort geöffnet. Offensichtlich dies ist keine großartige Lösung, da es nicht viel von unserer WPF-Steuerung zeigt diese Größe.
  • Die ElementHost-Größe in unserer Anwendung ist ungefähr 1000 * 700, aber wir haben bemerkt, dass es einen großen Drop-Off-Punkt gibt, wenn der ElementHost reduziert wird Größe, so wird es diese 10 Sekunden dauern, bis es herumkommt 350 * 350, an diesem Punkt verbessert sich plötzlich, um wieder schnell zu sein. Dies könnte Computer abhängig sein, oder vielleicht eine Beschränkung irgendeiner Art.
  • Wenn Sie das Bild aus dem wpf-Fenster entfernen, wird es wieder schnell.
  • Beim Hinzufügen neuer Bilder als Ressourcen und im WPF-Fenster wird die Öffnungszeit linear verlangsamt (z. B. 1 Bild = 7 Sekunden, 2 Bilder = 14 Sekunden).
  • Experimentiert mit dem Sicherstellen, dass das Bild die gleiche Größe hat, auf der es angezeigt wird, so dass es keine Größenänderung geben sollte, aber dies schien keinen Unterschied zu machen.
  • Experimentiert mit verschiedenen Bildtypen, .png, .tiff, .ico, aber sie schienen alle langsam zu sein.

Hat jemand anderes dieses Problem erfahren? Irgendwelche Vorschläge, was unser nächster Schritt sein könnte?

    
user3483066 01.04.2014, 00:27
quelle

1 Antwort

4

Nach ein paar weiteren Analysen mit einem Profiler, dieser Artikel schien das gleiche Problem zu sein wie das, was ich erlebt habe.

%Vor%

Nicht die schönste Lösung, aber es hat das Problem definitiv behoben.

    
user3483066 07.04.2014 23:50
quelle

Tags und Links