Kontakt
Von Minuten zu Sekunden: Diagnose einer exponentiellen Verlangsamung in produktiver CAD-Software

Wenn ein Kunde sagt, dass ein einzelner Vorgang in seiner Produktionssoftware „ein paar Minuten, manchmal länger“ dauert, greift man instinktiv zum Profiler und sucht die langsamste Funktion. Das ist ein vernünftiger erster Schritt, aber bei einem aktuellen Projekt reichte er allein nicht aus - die eigentliche Geschichte zeigte sich erst, als wir die Verarbeitungszeit gegen die Komplexität des Modells aufgetragen haben.

Das Symptom war keine langsame Funktion, sondern eine steile Kurve

Die betreffende Anwendung erzeugt ein 3D-Modell einer Stromschiene und animiert anschließend eine Biegemaschine, die daran arbeitet. Die Bediener berichteten, dass beide Schritte mit komplexeren Aufträgen spürbar langsamer wurden, aber die Beschwerden waren uneinheitlich - mal schnell, mal quälend langsam. Diese Uneinheitlichkeit war der erste Hinweis: Wäre einfach eine Funktion langsam, würde die Wartezeit vorhersehbar mit der Modellgröße wachsen. Stattdessen hatten wir es mit etwas zu tun, das eher exponentiellem Wachstum ähnelte.

Wir haben eine Testmatrix mit Modellen von 10 bis 300 Löchern und 1 bis 3 Biegungen aufgebaut und die Zeit jeder Phase gemessen: Laden des Modells, Erzeugen der Löcher, Rendern der Animationsbilder und Kollisionsprüfung. Visualisiert war das Muster eindeutig - die Verarbeitungszeit wuchs nichtlinear mit der Zahl der Löcher, während die Zahl der Biegungen kaum eine Rolle spielte. Bei 300 Löchern dauerte allein die Erzeugung des 3D-Modells über 13 Minuten.

Nichtlineares Wachstum bedeutet fast immer ein Algorithmus- und kein Hardwareproblem

Sobald wir die Kurve sehen konnten, ließ sich die Ursache leichter eingrenzen: Die Löcher wurden nacheinander erzeugt, eine Geometrieoperation nach der anderen, mit einem vollständigen Neuaufbau des Kollisionsmodells nach jeder einzelnen Änderung. Ein Problem der Form O(n²), versteckt hinter etwas, das wie „einfach ein großes Modell“ aussah. Keine Hardwareaufrüstung hätte das gelöst - die Lösung musste algorithmisch sein.

Unsere Empfehlung: das sequenzielle Erzeugen der Löcher durch eine einzige gebündelte Geometrieoperation ersetzen, die Kollisionsprüfung zwischenspeichern, statt sie bei jeder Änderung neu aufzubauen, und sowohl die Modell- als auch die Animationserzeugung aus dem UI-Thread herauslösen, damit die Bediener nicht auf eine vollständige Vorschau warten müssen. Erwarteter Effekt: 75-85 % weniger Verarbeitungszeit auf ganzer Linie.

Die allgemeine Lehre

Wenn eine Performance-Beschwerde uneinheitlich ist statt gleichmäßig langsam, profilieren Sie nicht nur den langsamsten Durchlauf - tragen Sie die Zeit gegen die Variable auf, die sich zwischen „schnellen“ und „langsamen“ Fällen tatsächlich ändert. Die Form dieser Kurve führt Sie meist direkt zu dem Algorithmus, der unnötig wiederholte Arbeit leistet - lange bevor Sie die Infrastruktur anfassen müssen.

“Wenn eine Performance-Beschwerde uneinheitlich ist statt gleichmäßig langsam, profilieren Sie nicht nur den langsamsten Durchlauf - tragen Sie die Zeit gegen die Variable auf, die sich zwischen „schnellen" und „langsamen" Fällen tatsächlich ändert.”

Mateusz Konicki
Tags:PerformanceCADFallstudie
Geschrieben vonMateusz KonickiGründer, 54Soft

Stehen Sie in Ihren eigenen Systemen vor einem ähnlichen Problem?

Vereinbaren Sie ein kurzes Kennenlerngespräch und sagen Sie uns, was Sie brauchen. Wir schlagen vor, wo man am besten beginnt.

Gespräch vereinbaren