Layout erst updaten, wenn alle gewünschten Steuerelemente verändert wurden

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von CyberFreak44.

    Layout erst updaten, wenn alle gewünschten Steuerelemente verändert wurden

    Hallo Leute!

    Ich hab mal ne Frage wegen Performance bei WPF-Programmen.
    Es geht dabei speziell um ein Musikvisualisierungsprogramm.

    Und zwar hab ich folgendes Problem:
    Zuerst hatte ich nur (!) 60 ProgressBars (für ein Frequenzspektrum), welche alle 20 ms (50 fps) geändert wurden.
    Da ging das alles ganz flüssig.
    Jetzt wird der Hintergrund zusätzlich entsprechend der Laustärke heller bzw. dunkler.
    Leider merkt man, dass es zu ruckeln beginnt und der PC mit dem rendern nicht mehr ganz mitkommt.

    Meine Vermutung ist, dass nach jeder Wertänderung eines Steuerlements (also ProgressBar bzw. Hintergrund) sofort das Layout geupdated wird.
    Da wäre es doch besser erst am Schluss nachdem alle Werte geändert wurden alles gemeinsam zu rendern.
    Gibt es da irgendeine Möglichkeit?

    Da ich später damit ein Video mit 50 fps machen möchte, wäre so ein Geschwindigkeitsboost nicht schlecht, da so etwas ohnehin viel Leistung frisst.
    Dass beim speichern eines Videos mit 50 fps es ruckelt wird sich wahrscheinlich nicht ändern lassen, doch das ist kein Problem.
    Denn es soll zwei Modi geben (Preview und Rendern).
    Beim Preview wird es nur so angezeigt und dazu die Musik abgespielt und muss nicht gespeichert werden und sollte deshalb auch flüssiger gehen.
    Bei Rendern muss kein Ton abgespielt werden, da ich nur die Grafik als Video benötige.
    Den Ton werde ich entweder im nachhinein dazuspielen oder ein anderes Programm verwenden.

    Im Anhang habe ich das momentane Layout angehängt.
    Der Bereich im blauen Rechteck wird später als Video gerendert.
    (Der Text oben kann vernachlässigt werden. Ich will damit Videos für YouTube machen und das ist mein Kanalname :D )

    Ich würde mich über jede Idee freuen, die mich näher an mein Ziel bringt.
    LG CyberFreak44
    Bilder
    • Layout.PNG

      264,23 kB, 1.875×1.125, 149 mal angesehen
    Es gibt für alles eine Lösung, auch wenn es nicht so ausschaut! ^^
    Ich bin nicht sonderlich gut mit WPF, aber mir erscheinen Progressbars für das Vorhaben nicht gut geeignet. Ich selbst hätte es mit einer Lib wie WPF Sound Visualization Library probiert und das dann entsprechend angepasst oder alternativ geschaut wie ich das zeichnen kann, denn WPF kann da schon einiges.

    Insgesamt habe ich das Vorhaben aber nicht zu 100 % verstanden (Musikvisualisierung und ein Video rendern) - deswegen kann meine Antwort auch am Ziel vorbeischießen.
    Zum besseren Verständnis erklär ich mein Vorhaben nochmal.

    Ich mache gerne Musik und möchte dieses auf YouTube teilen.
    Da man allerdings keine Audiodatei einfach so hochladen kann, muss ich ein Video machen.
    Außerdem ist es auch viel interessanter mit irgendeiner Visualisierung.

    Also habe ich als Ausgangsmaterial eine Audiodatei (in meinem Fall eine mp3-Datei).
    Mithilfe dieser Datei soll mein Programm eine passende Animation (zB. Freuquenzspektrum) darstellen.
    Dann soll alle 20 ms (50 fps) ein Bild gerendert und abgespeichert werden.
    Wenn das ganze Lied durchgelaufen ist, werden die einzelnen Bilder zu einer Videodatei zusammengeführt.
    Am Schluss muss nur noch der Ton dazu. Dafür kann ich aber auch ein anderes Programm verwenden, wenn es zu umständlich sein sollte.

    Da ich mich nicht als Profiprogrammierer bezeichnen würde, freue ich mich wenn es relativ einfach geht.
    Deshalb dachte ich mir, dass ProgressBars dafür gut geeignet sind, da man nur die Value-Eigenschaft ansprechen muss.

    Auf jeden Fall vielen Dank für deinen Tipp. Ich werd schauen was sich da machen lässt.
    Aber trotzdem wäre es nützlich zu wissen, wie man das Layout erst nach mehreren Aktionen aktualisieren kann.
    Es ginge auch automatische Updates generell auszuschalten, da ich einen 20 ms Timer habe, der dann jedes Mal ein Update triggern könnte.
    Es gibt für alles eine Lösung, auch wenn es nicht so ausschaut! ^^