Baustatik: Warum dauert das laden des Projektes so lange


Thomas Wölfer
Thomas Wölfer

02. Juli 2013


… und warum stürzt das Programm danach beim öffnen von Fenstern ab?

Das ist ein Problem, das ein Kunde heute hatte. Er schickte uns auch ein paar Fehlermeldungen, und auf Basis der Daten aus der Fehlermeldung war das Problem relativ schnell diagnostiziert.

Ein Teil der Daten in der Fehlermeldung betrifft die Windows “Handles”, die das Programm momentan verwendet. In diesem Fall wurden unter anderen knapp 10.000 User-Handles verwendet. Ein “Handle” in diesem Kontext wird im wesentlichen jedes mal verbraucht, wenn man ein Fenster öffnet (dabei ist auch ein “Menü”, oder ein Button, – im Prinzip alles was rechteckig ist – ebenfalls ein Fenster.).

Nun gibt es von Windows (von Version zu Version leicht unterschiedliche) feste Grenzen, für die Anzahl an Handles die ein einzelnen Programm verwenden darf. Im Wesentlichen sind das 10.000 Stück, danach ist Schluss.

Das ist aber keine echte Einschränkung: Die Baustatik verbraucht im “Leerlauf” circa 500 Handles. Das kann man im Task-Manager leicht überprüfen, denn der hat extra eine Anzeigespalte für die Handles::

Nun steigt die Anzahl der verbrauchten Handles für jedes zusätzlich geöffnete Dokument – wenn auch nur leicht. Schließt man das zugehörige Arbeitsfenster wieder, werden auch die verbrauchten Handles zurückgegeben, und stehen danach für neue Fenster zur Verfügung.

Die Anzahl der Handles die ein Arbeitsfenster benötigt ist aber minimal – so minimal, das es keine Rolle spielt ob man 5, 10 oder 50 Arbeitsfenster gleichzeitig verwendet. (Es macht zwar vom Handling her nicht besonders viel Sinn mit 50 geöffneten Arbeitsfenstern zu arbeiten – aber gehen würde es.)

Trotzdem ist oberhalb von ein paar hundert (Die exakte Zahl habe ich nicht ausprobiert) irgendwann mal Schluss: Man kann einfach nicht “beliebig viele” Arbeitsfenster öffnen – aber eben doch eine ganze Menge.

Wenn man nun “eine ganze Menge” (Im Fall der mir vorlag, etwa 900 (!)) Fenster geöffnet hat, und dann das Projekt speichert und die Baustatik beendet, ist zunächst noch alles OK. Öffnet man das Projekt dann wieder in der Baustatik, dann stellt diese die Fenster wieder her, die beim beenden geöffnet waren. In diesem Fall also etwa 900 Stück. Dazu müssen natürlich auch die 900 Dokumente gelesen werden – und da liegt dann auch der Grund dafür, das das laden “lange” dauert. Je nachdem wie groß die einzelnen Dokumente sind, bemerkt man keinen Unterschied, ob nun 3 oder 10 Dokumente geladen werden: Bei ein paar hundert merkt man das aber sehr wohl.

Und die Abstürze folgen dem dann auf den Fuß: Dadurch, das so viele Dokumente offen sind, sind die Handles verbraucht: Will man ein neues Fenster öffnen, und sei es nur eine Eigenschaften-Ansicht, wird ein weiteres Handle benötigt – doch das gibt es nicht mehr. Resultat: Fehlermeldung.

Lange Rede kurzer Sinn: Es spricht überhaupt nichts dagegen, mehrere Dokumente gleichzeitig geöffnet zu haben – aber irgendwann sollte man mal sicherstellen, das es nicht gleich hunderte werden.