Auf die Frage “Hätten Sie gerne noch ein paar Memory-Leaks in Ihrer Anwendung?” würden die meisten Kunden vermutlich vehement mit “Nein” antworten. Und das selbst wenn die Leaks kostenfrei wären. Obwohl die wenigsten Anwender also Memory Leaks wünschen, liefern Entwickler sie trotzdem regelmäßig mit ihren Anwendungen aus. Selbstverständlich geschieht dies nicht bewusst. Stattdessen schleicht sich das Leak still und heimlich in die Applikation und entfaltet seine volle Wirkung erst im Produktivbetrieb beim Kunden.
Als .NET Anwendungsentwickler sind wir uns natürlich keiner Schuld bewusst, schließlich gibt es unter .NET dank des Garbage Collectors gar keine Memory Leaks mehr. Zumindest in der Theorie! In der Praxis befinden sich jedoch in relativ vielen Anwendungen Memory Leak ähnliche Zustände, die zum unkontrollierten Anwuchs des Speicherverbrauchs einer Anwendung führen und im schlimmsten Fall mit einem Absturz enden.
In meinen ersten Jahren auf der .NET Plattform bin ich selbst oft genug in die Memory Leak Falle hereingetappt. Nach anfänglicher Ratlosigkeit arbeitete ich mich mühevoll in windbg ein und rückte so den Memory Leaks auf die Pelle. Mittlerweile habe ich zwar das Werkzeug gewechselt und nutze statt windbg meist den Redgate Ants Memory Profiler, trotzdem analysiere ich weiterhin regelmäßig Memory Leaks unter .NET. Nicht nur meine eigenen, sondern auch die meiner Kunden. Eine Auswahl der fünf häufigsten bzw. gemeinsten Leaks habe ich Ende 2014 in einem Vortrag zusammengefasst, den ich seitdem auf mehreren Konferenzen und User Group Treffen gehalten habe. Als ich den Vortrag vorbereitet habe ging ich davon aus, dass es sich um ein “Randgruppenthema” handelt, dass nur relativ wenige Teilnehmer interessieren wird. Tatsächlich war jedoch das Gegenteil der Fall. Der Memory Leak Vortrag war mein bisher erfolgreichster. Auf jeder Konferenz war der Vortrag so gut besucht, dass zum Teil einige Teilnehmer sogar auf dem Boden sitzen oder stehen mussten.
Eines der persönliches Highlights für mich war es den Vortrag während der C# Days der BASTA Spring 2015 und auch auf der Herbst-BASTA 2015 halten zu dürfen. Die Aufzeichnung des BASTA Spring Vortrags ist mittlerweile online. Der Einfachheit halber habe ich das Video direkt hier im Blog eingebunden.
In dem Video erkläre ich folgendes:
- Wie funktioniert der .NET Garbage Collector Wie geht man bei der Analyse von Memory Leaks systematisch vor Welche Leaks befinden sich typischerweise in .NET Anwendungen Wie behebt man gefundene Leaks schnell und zuverlässig
Wer also gerne lernen möchte, wie er Memory Leaks in der eigenen Anwendung finden kann, der sollte sich auf jeden Fall einmal das Video ansehen. Der Quellcode des Vortrags befindet sich übrigens online auf *github. Somit kann jeder der möchte gerne selbst auf die Suche gehen. Außerdem unterstütze ich auch sehr gerne bei der Memory Leak Analyse des eigenen Quellcodes.
Über Kommentare, entweder hier im Blog, oder direkt auf Youtube freue ich mich natürlich.