ProgressBar leakt user handles
Veröffentlich am 13.03.2008, 07:59
.. ich werde noch verrückt hier, seit gestern Nachmittag bin ich auf der Suche nach einem recht eigenartigen Problem und nun habe ich den Übeltäter endlich gefunden.
In einem meiner Kundenprojekte läuft unter anderem eine sehr komplexe GUI für die Erfassung und statistische Auswertung diverser Daten. Für die Auswertung verwende ich an verschiedenen Stellen ProgressBars aus dem Standardsortiment von Microsofts .NET Libraries. (warum ich gerade die ProgressBars ansprechen? dazu kommen wir gleich).
Das Programm hat immer mal wieder win32Exceptions ala "Cannot create window handle" geworfen. Sehr aufschlussreich - muss ich schon sagen.
Nach einiger Recherche ist mir dann aufgefallen, dass der NativeErrorCode "14" ist. Dieser bedeutet soviel wie "OutOfMemory". Da die Testmaschine 1GB Ram hat und außer Windows+Updates nichts installiert ist, konnte ich das beim besten Willen nicht glauben.
Ich habe mich dann auf die Suche nach dem Übeltäter gemacht und mit Hilfe durch den ProcessExplorer festgestellt, dass das Programm immer mehr USER Handles vom System frisst.. und irgendwann ist Schluss. GDI wirft dann die besagte "Cannot create window handle" Exception.
Durch Try'n'Error habe ich dann den Täterkreis immer weiter gegrenzt und am Ende blieben nur noch die ProgressBars übrig (hat eine Weile gedauert, in der GUI liegen ca. 1400 Controls rum). Scheinbar disposen die ProgressBars nicht ordentlich, anders kann ich mir die unmenschlich hohe Anzahl an Userhandles derzeit nicht erklären.
Das Ende vom Lied? Ich zeichne mir die ProgressBars nun selbst, ist eh "cooler" ;-)