DMXC 3.3.0 RC5: Ständige Abstürze der GUI

  • Ich habe seit neuestens ständige Abstürze der GUI.


    Sie treten nur sporadisch auf aber immer wieder bei:

    - Laden einer Fensteranordnung

    - Öffnen einer Bühnenansicht

    - Beim Zoomen per Mauspad im ImputAssignment

    - Laden der Szenenlisten beim Hinzufügen einer Szenensiste (start/stop/go) in eine andere Szenenliste

    - Laden der Szenenlisten beim Hinzufügen in eine Timecodeplayer-Spur (insbesondere, wenn vom letzten Einfügen noch etwas im Filterfeld steht)

    - "Flackern" bzw. Hin- und Herspringen innerhalb weniger ms des Cursors in der Timecodeshow, wenn man versucht mitten in der Show zu starten


    Der Absturz äußert sich dann durch:

    - Leere Fenster, eingefrorenes Fester, Leere Cuelist-Monitore oder leere Listen. Andere Fenster funktionieren meistens noch. Kernel und Umbra laufen anscheinend weiter. Ein Schließen der GUI und wieder Öffnen löst meistens das Problem. In seltenen fällen schließt sich das GUI Fenster von selbst. Ab und zu schließt sich dann auch Kernel und Umbra.


    Glücklicherweise läuft ein Abspielen der Timcodeshows von vorne und das Bedienen der Softdesks und Executoren stabil. So dass es eher beim Programmieren Probleme macht / nervt, wenn man alle paar Minuten die GUI neu starten bzw. das Projekt neu laden muss.


    Ich hab das Problem bei allen drei Rechnern, auf denen ich arbeite. Alle drei laufen mit Win11. Ein Betrieb im Kompatibilitätsmodus bringt keine Verbesserung.


    Ich kann nicht sicher sagen, ob das Problem mit dem Wechsel von RC4 auf RC5 aufgetreten ist. Ich glaube mehr an einen Bug in meinem Projekt. Es ist ja zwischenzeitlich auch weiter gewachsen.


    Beim Absturz tauchen im Kernel und Umbra Fehlermeldungen auf, mit denen ich allerdings nichts anfangen kann:


    10:25:31 ERROR GoboAffinityClass - Exception when loading Gobo ICON-001558.png: Out of memory.

    System.OutOfMemoryException: Out of memory.

    at System.Drawing.Graphics.CheckErrorStatus(Int32 status)

    at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)

    at LumosLIB.Tools.ImageTools.Resize(Image input, Int32 newWidth, Int32 newHeight, InterpolationMode mode, Boolean keepAspectRatio) in D:\Jenkins\workspace\Lumos_Pipeline_3.3\LumosLIB\src\Tools\ImageTools.cs:line 141

    at org.dmxc.lumos.Kernel.HAL.Affinity.GoboAffinityClass.correlate(RunContext ctx, Boolean clean) in D:\Jenkins\workspace\Lumos_Pipeline_3.3\Lumos\src\Kernel\HAL\Affinity\GoboAffinityClass.cs:line 248

    10:25:37 ERROR GoboAffinityClass - Exception when loading Gobo ICON-002054.png: Out of memory.

    System.OutOfMemoryException: Out of memory.

    at System.Drawing.Graphics.CheckErrorStatus(Int32 status)

    at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)

    at LumosLIB.Tools.ImageTools.Resize(Image input, Int32 newWidth, Int32 newHeight, InterpolationMode mode, Boolean keepAspectRatio) in D:\Jenkins\workspace\Lumos_Pipeline_3.3\LumosLIB\src\Tools\ImageTools.cs:line 141

    at org.dmxc.lumos.Kernel.HAL.Affinity.GoboAffinityClass.correlate(RunContext ctx, Boolean clean) in D:\Jenkins\workspace\Lumos_Pipeline_3.3\Lumos\src\Kernel\HAL\Affinity\GoboAffinityClass.cs:line 248


    Stürzt alles ab kommt auch dieser Fehler:


    10:23:17 FATAL DMXControl 3 Kernel - Unhandled Exception: Object reference not set to an instance of an object.

    System.NullReferenceException: Object reference not set to an instance of an object.

    at org.dmxc.lumos.Kernel.Net.gService.Project_gService.<>c__DisplayClass29_0.<_saveProjectVersion_RequestReceived>b__0(ProjectChangeStatusResponse a) in D:\Jenkins\workspace\Lumos_Pipeline_3.3\Lumos\src\Kernel\Net\gService\Project_gService.cs:line 498

    at System.Progress`1.InvokeHandlers(Object state)

    at System.Threading.SynchronizationContext.<>c.<Post>b__8_0(ValueTuple`2 s)

    at System.Threading.QueueUserWorkItemCallback`1.Execute()

    at System.Threading.ThreadPoolWorkQueue.Dispatch()

    at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

    at System.Threading.Thread.StartCallback()

    An unhandeled Exception has occoured. DMXControl 3 Kernel has to be terminated. Press Enter to exit.

    10:23:18 FATAL DMXControl 3 Kernel - Unhandled Exception: Object reference not set to an instance of an object.


    Kann jemand etwas mit den Fehlermeldungen anfangen?


    Hatte jemand schon einmal solche Phänomene?


    Bin über jeden Hinweis, wo ich suchen kann dankbar.

  • LightningBrothers

    Changed the title of the thread from “Ständige Abstürze der GUI in RC5” to “DMXC 3.3.0 RC5: Ständige Abstürze der GUI”.
  • Hallo!


    Kannst du einmal die kompletten Log-Files sowie auch das Projekt zur Verfügung stellen, mit dem du die Problematik am ehesten reproduzieren kannst? Denn gerade wenn du hier ein Projekt hast, was das Einfrieren der GUI regelmäßig hervorruft, ist dieses wichtig.


    Was dann auch nochmal gut zu wissen wäre: die Hardware-Spezifikation deiner PC. Magst du einmal aufschreiben, welche CPU, GPU etc. in den Rechnern verbaut sind?


    Stefan

  • Hallo Stefan. Vielen Dank schonmal im Voraus für die Unterstützung.


    Hier die Daten des Rechners, den ich gerade vor Ort habe (die andere beiden stehen in der Veranstaltungshalle):


    Prozessor: 13th Gen Intel(R) Core(TM) i7-13620H 2.40 GHz

    Installierter RAM: 16,0 GB (15,7 GB verwendbar)

    Systemtyp: 64-Bit-Betriebssystem, x64-basierter Prozessor

    Windows-Edition: Windows 11 Home

    Windows-Version: 23H2


    Die Log-File befinden sich im Anhang. Eine Version des Projektes hat (wegen der enthaltenen Audiofiles) mittlerweile eine Größe von 70MB. Das ist zu groß um es hier ins Forum zu laden. Gibt es eine andere Möglichkeit das Projekt auszutauschen?


    Gruß

    Bernd

  • mittlerweile eine Größe von 70MB.

    Das hier ist genau das Problem. Und DMXControl 3 sagt dir das auch tatsächlich, nämlich hier, ganz am Anfang der von dir eingefügten Fehlermeldung:


    10:25:31 ERROR GoboAffinityClass - Exception when loading Gobo ICON-001558.png: Out of memory.

    System.OutOfMemoryException: Out of memory.

    Das heißt, DMXControl 3 kann nicht mehr mehr Speicher allozieren / adressieren. Und das folgende ist jetzt entscheidend: Bis zu diesem Zeitpunkt war der Zugriff auf den von DMXContol 3 gemanagten Speicher konsistent. Alle Operationen um Dinge in Objekten zu speichern oder zu laden waren innerhalb der Bereiche der Objekte und alles war sauber organisiert. Das ist nun nicht mehr der Fall! Jetzt kann ALLES passieren und niemand, kann voraussagen, was jetzt passiert. Denn der von DMXControl 3 verwaltete Speicher ist jetzt in einem inkonsistenten Zustand, in dem Teile geschrieben wurden, Teile nicht. Keiner kann dir sagen, welcher Teil geschrieben wurde, bevor das passiert ist und jedes nun folgende Schreiben in den Speicher, was DMXControl 3 übrigens häufiger macht (z.B. bei jedem Empfang von Nachrichten) kann mehr halbe Objekte produzieren. Das ist beispielsweise der Grund für alle Punkte, die unter "Der Absturz äußert sich dann durch:" aufgelistet sind. Nun ist DMXControl 3 faktisch nicht mehr lauffähig und MUSS neugestartet werden. Wir können keinerlei Garantie geben, was ab dem Moment der Out of Memory Exception innerhalb von DMXControl 3 passiert und das werden wir auch nicht! Ab da ist der Speicher faktisch ein Trümmerhaufen!


    Das erst einmal zu dem "Was". Nun zu dem "Warum": Jetzt könnte man ja auf die Idee kommen: "Häää, wieso geht DMXControl 3 der Speicher aus? Ich habe doch 16, 32 oder sogar 64GB verbaut und der ist immer total leer, wenn das in DMXControl 3 passiert.". Leider ist DMXControl 3 oder genauer gesagt sind zwei der drei Komponenten von DMXControl 3 noch 32bit Programme. Sie können also maximal mit 32bit Adressen umgehen. Dies gilt auch für Speicheradressen. Durch andere weitere limitierende Faktoren können die verschiedenen Komponenten von DMXControl 3 dadurch in der Praxis etwa 1,4 - 1,8GB an Arbeitsspeicher adressieren, bevor ihnen der Speicher aus geht. Dieses Problem kann man umgehen, wenn man eine 64bit Applikation hat. Diese kann viel mehr Speicher adressieren (16 Exabytes, was etwa 16 Mio. Terabytes entspricht) und wird auf absehbare Zeit keine solchen Speicherprobleme mehr haben. Aber dafür müssen auch alle Dinge in DMXControl 3 64bit-kompatibel sein, was aktuell nicht gegeben ist. Wir arbeiten zwar daran, DMXControl 3 zu 64bit-Applikationen zu machen. Das braucht aber noch etwas Zeit, bis wir das geschafft haben.


    Was kannst du nun dagegen tun? Gegen das eigentliche Problem (das DMXControl 3 aus 32bit Anwendungen besteht) kannst du nichts machen. Das müssen wir beheben. Das einzige, was du aktuell machen kannst und das dürftest du ungern hören: Downsizing. Dein Projekt ist schlicht zu groß sprich es müssen zu viele Dinge daraus in DMXControl 3 nach dem Laden verwaltet werden. Du musst also aktuell dein eines Projekt in mehrere aufteilen, damit das funktioniert. Das gilt solange, bis wir den 64bit-Support für den Kernel und die GUI fertig haben. Für das Erwartungsmanagement: Das dürfte noch ein paar Jahre dauern. Grund ist da vor allem in der GUI, dass wir mehrere große Fenster austauschen müssen (Stage View, Programmer, Input Assignment und die Netzwerkansicht). Das ist nicht so einfach und der Umfang ist groß. Wenn das geschehen ist, können wir XNA rausschmeißen, was aktuell der Blocker für eine 64bit-GUI ist. Im Kernel sind es die Interface Plugins. Da müssen wir uns noch Möglichkeiten anschauen.


    Ich hoffe, dieser umfangreiche Post hat dir geholfen, das Problem zu verstehen und warum dies hier nichts ist, was direkt an DMXControl 3 selbst liegt. Denn es tritt hier kein Bug auf sondern liegt einfach am zu großen Projekt.

    Viele Grüße

    JP

    im Falle eines Falles klebt Gaffa einfach alles, denn Gaffa ist dein Freund und Helfer :thumbup:

    Edited once, last by JPK ().

  • Das ist natürlich etwas, was man 6 Tage vor der ersten Aufführung nicht hören möchte :(


    Aber gut. Da muss ich jetzt das Beste draus machen. Ich werde mal versuche, wie du schon vorgeschlagen hast, das Projekt in mehrere aufzuteilen.


    Es ist ohnehin so aufgebaut, dass jedem Programmpunkt einer Executor-Seite entspricht. Die zugehörigen Timecode-Shows und Audiofiles kann ich dann aus dem jeweiligen Projektteil entfernen.


    Die Geräte und alle Szenenlisten muss ich dann natürlich in allen Teilen komplett lassen, weil die Timecodeshows und die Executoren auf diesen Pool zugreifen. Ich hoffe, das ist kein Problem (ca. 350 Szenenlisten).


    Aber ich werde es herausfinden und berichten.


    Gruß

    Bernd

  • Vorne weg: Dies hier ist jetzt nur für diesen spezifischen Fall hier gedacht und soll nicht als allgemeine Anleitung für solche Fälle verstanden werden. Bevor du das jetzt so kurz vor der Aufführung auseinander reißt: Zu dem Speicherverbrauch trägt alles mögliche bei. Dazu gehören auch Gobos und Gerätebilder. Schau mal, ob es in deinem Fall schon hillft, wenn du die Gobos und Gerätebilder aus dem LibDevices Ordner im DMXControl 3 Verzeichnis raus nimmst und temporär wo anders hinverschiebst, deren Geräte du nicht hast. Dabei triggerst du du dann auch die Gobo-Korrelation, die deutlich kleiner ausfallen sollte, weil du ja nur noch recht wenig Gobos hast. Das könnte wie gesagt für deinen speziellen Fall jetzt helfen, ohne das du das Projekt zerlegen musst.

  • Zumindest was die Bilder, Gobos und die Gobo-Affinity angeht, werden die immer geladen, damit die Gobos generell verwendet werden können und die Affinity generell funktioniert.

  • Eine Version des Projektes hat (wegen der enthaltenen Audiofiles) mittlerweile eine Größe von 70MB. Das ist zu groß um es hier ins Forum zu laden. Gibt es eine andere Möglichkeit das Projekt auszutauschen?

    Schaue doch mal, ob du das Projekt über den Bugtracker als registrierter Nutzer einem neuen Ticket anhängen kannst - sofern der Punkt mit dem Austausch noch weiterhin ungeklärt ist.

  • Ich habe mittlerweile im Installationsordner /Kerne/LibDevices alle DLLs und in den Unterordnern die zugehörigen Bilder entfernt, die ich für das Projekt nicht benötige. Ich habe den Eindruck, dass es nun auf allen 3 Rechnern stabiler läuft - aber es gibt immer noch Abstürze. Insbesondere, wenn ich eine Timecode-Show in das Timecode-Editor-Fenster lade oder im Input-Assingment arbeite.


    Die gute Nachricht: Während der Proben, bei denen ich nur mit Executoren und Softdesks zum Fahren der Show arbeite ist es bis jetzt stabil gelaufen.


    Den aktuellen Stand des Projektes habe ich in meine Dropbox geladen. Unter folgenden Link solltet ihr es downloaden können


    https://www.dropbox.com/scl/fi/vvtr5fmoja0y9rxf3j7ll/Prunksitzung2025_1.0.123.dmz?rlkey=uzpialrsapkjw8tkm19n40esz&st=kc947puh&dl=1

  • Danke für das zur Verfügung stellen des Projekts. Ich habe es mir nun auch mal angesehen und konnte das von dir beschriebene Verhalten recht schnell nachvollziehen - die GUI ist bei mir auch abgestürzt, nachdem ich ein paar Audiodateien wiedergegeben habe und dann mal in eine deiner Timecode-Shows schauen sollte.


    Wie es passiert, geht genau in die Richtung, wie JPK bereits sagte: es ist offenbar zu viel im Projekt und zwar neben den Gobos eben die zahlreichen Audiodateien. Letztere fluten zum Beispiel die GUI beim Anschauen einer Timecode-Show mit vielen Daten, weswegen der entsprechende Teil am Ende nicht mehr genügend Speicher erhalten kann und in die besagte "Out of Memory Exception" läuft. Diese Meldung taucht in verschiedenster Weise kurz vor dem finalen Absturz der GUI in den Logdateien auf. Bei mir finde ich an der Stelle unter anderem solche Meldungen in den Logs, denen aber dann noch welche folgen.



    Aber gerade im Hinblick auf die zahlreichen Audiodateien in deinem Projekt, kommt bei mir folgende Frage auf: Wie viele von den Audiodateien hast du hier eigentlich nur unter dem Gesichtspunkt hinzugefügt, um nur ein System bedienen zu müssen? Ein entsprechender Ansatz wäre nämlich hier, dass nur die Audiodateien wirklich im Projekt verbleiben, wo es eine direkte Verwendung in einer Timecode-Show gibt. Alle anderen Audiodateien spielst du über eine separate Software ab.

  • Das stimmt schon. So ein bisschen missbrauche ich da DMX-Control auch etwas :)


    Aber das finde ich gerade seit Jahren das Schöne daran, dass ich alles aus einer Hand habe und vor allem dass die Audio-Files auf den Punkt sofort ohne Zeitverzug starten. Weiterhin macht es den Austausch zwischen Main- und Backup- und Programmier-Rechner einfacher, wenn man immer nur ein Projekt synchron halten muss.


    Daher war ich ja bei der V_3.3 so extrem begeistert, als ich von den Executoren-Spuren beim Timecode-Player gehört habe. Damit ist es mir möglich z.B. beim Start einer Timecode-Show ein zeitlich vorher laufendes Audiofile automatisch auszufaden zu lassen und zu beenden.


    Das ist für mich eine rießen Erleichterung, wenn ich solche Sachen automatisieren kann. Dann kann man sich in dem Moment um andere Sachen (Mikrophonie, Video …) kümmern und muss sich nicht auch noch darauf konzentrieren.


    Um den Vorteil aber zu nutzen zu können, müsse diese (z.B. Einzugs-/Introlieder) eben mit ins Projekt. Dann bleibt nicht mehr all zu viel übrig, was man weg lassen könnte.


    In diesem speziellen Fall kann ich eh nicht mehr viel machen. Übermorgen ist Generalprobe - Samstag die erste Aufführung. Da ist nicht mehr viel Zeit noch etwas anzupassen bzw. das Risiko zu groß, dass sich Fehler einschleichen.


    Daher werde ich (wie von JPK vorgeschlagen) das Projekt jetzt einfach mal in 2 Teilprojekte teilen (z.B. vor und nach der Pause) und die entsprechenden Timecodeshows und zugehörige Audiofiles entfernen. So müssten sich in den Teilprojekten die Files in etwa halbieren.


    Für die Zukunft muss ich mal schauen, wie ich neue Projekte hinsichtlich Audio-Files gestallte. Ich hatte einfach im Vorfeld nicht erwartet, das 90MByte mp3s ein Problem darstellen könnten.


    Übrigens habe ich in den letzten Jahren mit der V_2.12 einige Musical-Nummern gefahren. Dabei habe ich mit mehreren (nacheinander getriggerten) Audioplayer-Tracks Timecode-Shows in der Größenordnung von über einer Stunde gefahren. So etwas werde ich mit diesem Hintergrund vermutlich mit der V_3.3 vergessen können, oder?


    Kurze Frage noch: Kann es sein, dass von jedem File beim Laden des Projektes eine FFT und Waveform erstellt wird, auch wenn das File gar nicht in einer Timcodeshow eingebunden ist?

  • Das stimmt schon. So ein bisschen missbrauche ich da DMX-Control auch etwas :)

    Hehe... grundsätzlich ist das auch nicht verboten... ich persönlich arbeite teilweise auch nach dem Motto: solange etwas nicht explizit unterbunden wird, muss es auch funktionieren - selbst wenn es am Ende möglicherweise in einer solchen Konstellation nie explizit angedacht war. Durch diesen Ansatz bin ich manchmal aber auch schon anderweitig an verschiedene Grenzen gestoßen.


    Von daher ist dein Ansatz für mich auch absolut nachvollziehbar, wenn du dich alleine um noch zusätzliche Sachen kümmern musst und nicht genügend Hände zur Verfügung hast.


    Daher werde ich (wie von JPK vorgeschlagen) das Projekt jetzt einfach mal in 2 Teilprojekte teilen (z.B. vor und nach der Pause) und die entsprechenden Timecodeshows und zugehörige Audiofiles entfernen. So müssten sich in den Teilprojekten die Files in etwa halbieren.

    Diesen Vorschlag hatte ich überlesen - aber der läuft ebenfalls am Ende ja auch auf das hinaus, was an dieser Stelle wichtig ist: die Größe des Projekts reduzieren.


    Für die Zukunft muss ich mal schauen, wie ich neue Projekte hinsichtlich Audio-Files gestallte. Ich hatte einfach im Vorfeld nicht erwartet, das 90MByte mp3s ein Problem darstellen könnten.

    Wir sind hier beim Timecode-Player in DMXControl 3.3 (logischerweise) in der initialen Fassung unterwegs, wo es definitiv mit den kommenden Versionen entsprechende Optimierungen am Timecode-Player selbst, aber natürlich auch insgesamt geben wird. Dass der Timecode-Player aktuell nicht unendlich lange Audiodateien unterstützt, war uns durchaus in Teilen bewusst - es hatte sich aber nie so richtig die Gelegenheit ergeben, die (aktuellen) Grenzen final auszuloten. Mein Projekt beispielsweise, welches ich bei unseren Jahrestreffen nutzte, umfasst fünf Timecode-Shows. Allerdings war hier drumherum nicht so viel los wie bei dir, sodass es bei mir nicht zu den Abstürzen kam.


    Übrigens habe ich in den letzten Jahren mit der V_2.12 einige Musical-Nummern gefahren.

    Du musst im Vergleich zu DMXC 3.3.0 im Hinterkopf haben, dass der Timecode-Player in DMXC 3.3.0 ein vielfaches mehr kann als der in DMXC 2. Das fängt eben allein schon mit der FFT-Analyse an, die beim Programmieren so aussagekräftiger ist als eine einfache Wave-Form.



    Kurze Frage noch: Kann es sein, dass von jedem File beim Laden des Projektes eine FFT und Waveform erstellt wird, auch wenn das File gar nicht in einer Timcodeshow eingebunden ist?

    Wenn ich die Logs noch richtig im Kopf habe, wird die FFT erst generiert, wenn die entsprechende Timecode-Show im Timecode-Player angezeigt werden soll - das war ja bei mir auch der Zeitpunkt, wo bei mir die GUI ausstieg.

  • Wenn ich die Logs noch richtig im Kopf habe, wird die FFT erst generiert, wenn die entsprechende Timecode-Show im Timecode-Player angezeigt werden soll - das war ja bei mir auch der Zeitpunkt, wo bei mir die GUI ausstieg.

    Nein, tatsächlich werden die FFTs generiert, wenn eine Audiodatei in DMXControl 3 geladen wird. Das ist tatsächlich unabhängig davon, ob sie in einer Timecode-Show verwendet wird oder nicht.

  • Moin, also, das mit den FFT-Analysen der Audiofiles wird mit dem x64 umbau warscheinlich kein problem mehr sein.

    Das eigentliche Problem ist aber weniger die Analyse, als das UI-Framework WPF.

    Dieses ist nicht in der Lage Bilder/Zexturen die einmal geladen wurden zu entladen.

    Heist das der Speicherverbrauch steigt mit jeder weiteren Audiofile das in einer TimecodeShow angezeigt wurde(also ab dem moment wo es sichtbar im Fenster war)

    Das wird aber auch mit x64 weit weit nach hinten verschoben

  • Kann man evtl. die Möglichkeit schaffen, dass eine Audiodatei direkt über nen executor gesteuert werden kann ohne Teil einer Timecode Show zu sein? Also quasi nen simpler Audioplayer? Für den Anwendungsfall das man keine Lichtshow zu den Audios benötigt und nur eine simple Möglichkeit Sounds usw. abzuspielen...


    Gruße

    Nutzer99

  • Ich hab dein Project mal in der Entwicklungsumgebung geladen,
    Da sind fehler in ein paar DDFs, die es mir nicht erlauben das project zu öffnen

    Da sind mir auch schon entsprechende Fehlermeldungen im Kernel-Fenster beim Laden des Projektes aufgefallen. Ich konnte aber nicht herausfinden um welche DFFs es sich handelt. Laut deinem Fenster handelt es sich um das DFF "Triumph" und "TAS ProSpot".


    Ich schaue mir die DFFs mal an.